文字游戏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
6.3 KiB

2 weeks ago
# AGENTS.md - Build God Project
This document provides guidelines for agentic coding agents working on this repository.
## Project Overview
Build God is a full-stack application with:
- **Backend**: ASP.NET Core 8.0 Web API (C#)
- **Frontend**: Vue 3 + TypeScript + Vite + Element Plus
---
## 1. Build, Lint, and Test Commands
### Backend (.NET API)
Located in: `BuildGod_Api/`
```bash
# Build the solution
dotnet build BuildGod_Api.sln
# Run the API (from BuildGod_Api directory)
dotnet run --project Build_God_Api/Build_God_Api.csproj
# Build and run with Docker
docker build -t build-god-api BuildGod_Api/
docker run -p 5091:80 build-god-api
```
**Note**: No test framework is currently configured for the backend.
### Frontend (Vue 3)
Located in: `Build_God_Admin_Frontend/Frontend/`
```bash
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Type-check only
npm run type-check
# Preview production build
npm run preview
```
**Running a single test**: No tests are currently configured.
---
## 2. Code Style Guidelines
### Backend (.NET/C#)
#### General Conventions
- Use **file-scoped namespaces** (`namespace Build_God_Api.Controllers;`)
- Enable **nullable reference types** (`<Nullable>enable</Nullable>`)
- Use **primary constructors** for dependency injection
- Use **async/await** for all I/O operations
#### Naming Conventions
- **Types/Classes**: PascalCase (`AccountController`, `AccountService`)
- **Methods**: PascalCase (`GetAccount`, `Register`)
- **Properties**: PascalCase (`UserName`, `Email`)
- **Local variables**: camelCase (`accountId`, `existingAccount`)
- **Parameters**: camelCase (`accountName`, `emailAddress`)
- **Interfaces**: Prefix with `I` (`IAccountService`, `ICurrentUserService`)
#### Project Structure
```
Controllers/ # API endpoints
Services/ # Business logic (interface + implementation)
DB/ # Database entities/models
```
#### Error Handling
- Return `BadRequest("error message")` for validation errors
- Return `Ok(result)` for successful operations
- Use try-catch with logging for operations that may fail
- Use `ILogger<T>` for logging
#### Dependency Injection
```csharp
public class AccountController(IAccountService service) : ControllerBase
{
private readonly IAccountService _service = service;
// ...
}
```
#### Route Conventions
- Use `[Route("api/god/[controller]")]`
- Use `[ApiController]` attribute
- Use HTTP method attributes: `[HttpGet]`, `[HttpPost]`, `[HttpPut]`, `[HttpDelete]`
---
### Frontend (Vue 3 + TypeScript)
#### General Conventions
- Use **Composition API** with `<script setup lang="ts">`
- Enable **strict TypeScript** mode
- Use **path aliases**: `@/` maps to `src/`
#### Naming Conventions
- **Components**: PascalCase (`LoginView.vue`, `Sidebar.vue`)
- **Variables/functions**: camelCase (`handleLogin`, `userName`)
- **Types/Interfaces**: PascalCase (`LoginRequest`, `User`)
- **Constants**: UPPER_SNAKE_CASE (or camelCase for simple constants)
- **File names**: kebab-case for utilities, PascalCase for components
#### Project Structure
```
src/
api/ # API calls
components/ # Reusable components
views/ # Page components (often in subdirectories)
stores/ # Pinia stores
router/ # Vue Router configuration
```
#### Imports
- Use `@/` alias for src-relative imports: `import { useAuthStore } from '@/stores/auth'`
- Group imports: external libs → internal imports → types
- Use absolute imports for internal modules
#### TypeScript Guidelines
- Always define types/interfaces for API responses and request payloads
- Use `ref<T>` and `computed<T>` for reactive state
- Avoid `any` - use `unknown` or proper types
#### Vue Component Patterns
```vue
<script setup lang="ts">
import { ref, computed } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
const router = useRouter()
const loading = ref(false)
// ...
</script>
<template>
<!-- Use Element Plus components -->
</template>
<style scoped lang="css">
/* Component styles */
</style>
```
#### Pinia Store Pattern
```typescript
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useAuthStore = defineStore('auth', () => {
const token = ref('')
const isAuthenticated = computed(() => !!token.value)
const login = async () => { /* ... */ }
return { token, isAuthenticated, login }
})
```
#### UI Library (Element Plus)
- Use Element Plus components: `ElButton`, `ElInput`, `ElTable`, etc.
- Use `ElMessage` for notifications
- Use `ElMessageBox` for confirmations
- Follow Element Plus prop naming conventions
#### Error Handling
- Use try-catch with async/await
- Show errors with `ElMessage.error()`
- Handle 401 (unauthorized) by redirecting to login
---
## 3. API Integration
### Backend API Base URL
- Development: `http://localhost:5091/api/god/`
- Routes follow pattern: `api/god/{entity}` (e.g., `api/god/account/login`)
### Authentication
- Use JWT Bearer tokens
- Store token in `localStorage` as `auth_token`
- Include in requests: `Authorization: Bearer {token}`
### Common Endpoints
- POST `/api/god/account/register` - Register new account
- POST `/api/god/account/login` - User login
- POST `/api/god/account/login/admin` - Admin login (use: name="admin", password="build_god.123")
---
## 4. Development Workflow
1. **Start Backend**: Run `dotnet run` in `BuildGod_Api/`
2. **Start Frontend**: Run `npm run dev` in `Build_God_Admin_Frontend/Frontend/`
3. **Access**: Frontend runs on `http://localhost:5173` by default
---
## 5. Adding New Features
### Backend
1. Create model in `DB/` folder (extend `BaseEntity`)
2. Create service interface in `Services/`
3. Implement service in `Services/`
4. Create controller in `Controllers/`
5. Register service in `Program.cs`
### Frontend
1. Create API module in `src/api/`
2. Add Pinia store in `src/stores/` (if needed)
3. Create view component in `src/views/`
4. Add route in `src/router/index.ts`
---
## 6. Important Notes
- The admin login credentials are hardcoded: `admin` / `build_god.123`
- Backend runs on port 5091
- Frontend uses Vite proxy for API calls (configured in `vite.config.ts`)
- Use `npm run type-check` before committing to catch TypeScript errors
- Always use `await` with async operations - never ignore promises