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.
5.5 KiB
5.5 KiB
AGENTS.md - Build God Project
Project Overview
- Backend: ASP.NET Core 8.0 + PostgreSQL + SqlSugar ORM
- Admin Frontend: Vue 3 + TypeScript + Vite + Element Plus (port 5173)
- Game Frontend: Vue 3 + TypeScript + Vite + Element Plus + TailwindCSS + Three.js (port 5174)
1. Build, Lint, and Test Commands
Backend
dotnet build Build_God_Api/Build_God_Api/Build_God_Api.csproj
dotnet run --project Build_God_Api/Build_God_Api/Build_God_Api.csproj
dotnet run --urls "http://localhost:5091"
No test framework or linting configured.
Admin Frontend
npm install
npm run dev # http://localhost:5173
npm run build # Production build
npm run type-check # Type-check only
npm run preview # Preview production build
Game Frontend
npm install
npm run dev # http://localhost:5174
npm run build # Production build
vue-tsc --build # Type-check only
No test framework or ESLint configured for frontends.
2. Code Style Guidelines
Backend (.NET/C#)
Conventions:
- File-scoped namespaces (
namespace Build_God_Api.Controllers;) - Nullable reference types enabled (
<Nullable>enable</Nullable>) - Primary constructors for dependency injection
- Use
async/awaitfor all I/O operations - Avoid
region- prefer natural code organization
Naming:
- Classes/Types: PascalCase (
AccountController) - Methods/Properties: PascalCase (
GetAccount) - Local variables/Parameters: camelCase (
accountId) - Interfaces: Prefix with
I(IAccountService) - DTOs: Postfix with
Cmdfor commands,Dtofor responses
Project Structure:
Build_God_Api/Build_God_Api/
Controllers/ # API endpoints
Services/ # Business logic interfaces & implementations
Services/Game/ # Game-specific services
DB/ # Database entities (extend BaseEntity)
Dto/ # Data transfer objects
Common/ # Utilities
Hubs/ # SignalR hubs
Error Handling:
BadRequest("message")for validation errorsOk(result)for success- Try-catch with
Console.WriteLinefor error logging - Use DataAnnotations for input validation at controller level
Route Conventions:
[Route("api/god/[controller]")][ApiController]with[HttpGet]/[HttpPost]attributes
Database (SqlSugar):
- Entities extend
BaseEntity(providesId,CreatedOn,UpdatedOn,CreatedBy,UpdatedBy) - Auto-increment PK:
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
Frontend (Vue 3 + TypeScript)
Conventions:
- Composition API with
<script setup lang="ts"> - Path alias:
@/maps tosrc/ - Admin: Plain CSS (
<style scoped lang="css">) - Game: Tailwind CSS utility classes
Naming:
- Components: PascalCase (
LoginView.vue,Sidebar.vue) - Variables/functions: camelCase (
handleLogin) - Types/Interfaces: PascalCase (
LoginRequest) - Store names: kebab-case in defineStore (
defineStore('auth', ...))
Project Structure:
Admin: src/api/, src/components/, src/views/, src/stores/, src/router/, src/assets/
Game: src/api/, src/components/, src/composables/, src/views/, src/stores/, src/router/
TypeScript Settings (tsconfig.app.json):
{ "strict": false, "strictNullChecks": false, "noUnusedLocals": false, "noUnusedParameters": false }
API Pattern (shared axios instance):
// src/api/index.ts
const instance = axios.create({
baseURL: import.meta.env.VITE_API_URL || 'http://localhost:5091/api/god/',
timeout: 10000,
headers: { 'Content-Type': 'application/json' }
})
instance.interceptors.request.use((config) => {
const token = localStorage.getItem('auth_token') // or sessionStorage for Admin
if (token) config.headers.Authorization = `Bearer ${token}`
return config
})
instance.interceptors.response.use(
(response) => response.data,
(error) => { /* handle 401, reject with data */ }
)
export default instance
// src/api/{entity}.ts
import http from './index'
export const characterApi = {
getList: (): Promise<CharacterDto[]> => http.get('/character/list')
}
Pinia Store Pattern:
export const useAuthStore = defineStore('auth', () => {
const token = ref('')
const isAuthenticated = computed(() => !!token.value)
const login = async (credentials: LoginRequest): Promise<boolean> => { /* ... */ }
return { token, isAuthenticated, login }
})
3. API Integration
- Base URL:
http://localhost:5091/api/god/ - Auth: JWT Bearer tokens
- Game:
localStorageasauth_token - Admin:
sessionStorageasauth_token
- Game:
Key Endpoints:
- POST
/api/god/account/register - POST
/api/god/account/login - POST
/api/god/account/login/admin
4. Development Workflow
dotnet run --project Build_God_Api/Build_God_Api/Build_God_Api.csprojnpm run devinBuild_God_Admin_Frontend/Frontend/npm run devinBuild_God_Game/
5. Adding New Features
Backend
- Create model in
DB/(extendBaseEntity) - Create interface in
Services/ - Implement service in
Services/ - Create controller in
Controllers/ - Register service in
Program.cs
Frontend
- Add API function in
src/api/{entity}.ts - Add Pinia store in
src/stores/if needed - Create view component in
src/views/ - Add route in
src/router/index.ts
6. Important Notes
- Admin credentials:
admin/love_god.123 - Test account:
Tom/123456(email: 976802198@qq.com) - Backend: ports 59447 (HTTPS), 59448 (HTTP)
- Always use
awaitwith async operations