Files
MemeMind-Server/AGENTS.md
2026-05-14 16:45:24 +08:00

79 lines
5.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 仓库协作指南
## 项目结构与模块组织
本仓库是 MemeMind 的 NestJS 后端服务。应用代码位于 `src/`。通用守卫、过滤器、装饰器和基础 DTO 位于 `src/common/`。运行时配置和 TypeORM 配置位于 `src/config/``src/database/`。业务代码按领域划分在 `src/modules/` 下,包括 `auth/``level/``share/``user/``game-config/`。新增代码应放入对应模块,并遵循 Nest 的常规结构:`*.controller.ts``*.service.ts``*.module.ts`,以及按需补充 `dto/``entities/``repositories/`。单元测试与源码相邻,命名为 `*.spec.ts`;端到端测试位于 `test/`
## 构建、测试与开发命令
使用 `pnpm`,仓库已包含 `pnpm-lock.yaml`
- `pnpm install`:安装依赖。
- `pnpm run start:dev`:以 watch 模式启动本地开发服务。
- `pnpm run build`:将 TypeScript 编译到 `dist/`
- `pnpm run start:prod`:从 `dist/main` 启动生产构建。
- `pnpm run lint`:运行 ESLint 并自动修复可修复问题。
- `pnpm run format`:使用 Prettier 格式化 `src/``test/`
- `pnpm run test``pnpm run test:cov``pnpm run test:e2e`:运行单测、覆盖率测试和 e2e 测试。
## 编码风格与命名规范
使用严格类型的 TypeScript除非处于明确的边界场景否则避免新增 `any`。Prettier 约束为单引号和尾随逗号。遵循现有的 2 空格缩进和 NestJS 命名习惯:类使用 `PascalCase`,方法与变量使用 `camelCase`,目录使用 kebab-caseDTO 文件名要具备明确语义,例如 `wx-login.dto.ts``share-response.dto.ts`
## 测试规范
单元测试和 e2e 测试均使用 Jest。单元测试文件命名为 `*.spec.ts`,并与被测源码放在一起。只要 controller 契约、service 逻辑、repository 行为或鉴权流程发生变化,就需要新增或更新测试。提交 PR 前应运行 `pnpm run test:cov`,覆盖率结果输出到 `coverage/`
## 接口文档规范
只要接口发生改动,必须同步更新 `docs/api/` 目录中的对应文档,确保客户端可以直接使用该目录下的文档进行联调。
- 新增接口:在对应模块文档中新增接口章节,并补充请求参数、响应结构、示例和调用场景。
- 修改接口:同步更新字段、鉴权方式、错误码、业务规则和示例。
- 删除或废弃接口:在文档中明确标记,并说明客户端迁移方式。
- 如果一次改动涉及多个模块接口,相关文档都要一并更新,不能只改代码不改文档。
## 提交与合并请求规范
最近的提交历史使用 Conventional Commit 前缀,例如 `feat:``perf:``refactor:`,也包含带作用域的形式,例如 `feat(share): ...`。请保持提交聚焦并沿用同样格式。PR 需要说明行为变更、配置或迁移影响、关联的 issue如果有并在请求或响应结构发生变化时附上 API 示例。
## 配置与部署说明
环境变量在 `src/config/env.validation.ts` 中做校验。敏感信息应保存在 `.env.local` 或部署环境专用配置中不能写入源码。无论本地还是生产环境API 统一暴露在 `/api`Swagger 暴露在 `/api/docs``pnpm run deploy` 会调用 `deploy.sh``rsync` 和 PM2因此执行前需要先检查其中的服务器相关配置。
<claude-mem-context>
# Memory Context
# [MemeMind-Server] recent context, 2026-05-14 4:25pm GMT+8
Legend: 🎯session 🔴bugfix 🟣feature 🔄refactor ✅change 🔵discovery ⚖decision 🚨security_alert 🔐security_note
Format: ID TIME TYPE TITLE
Fetch details: get_observations([IDs]) | Search: mem-search skill
Stats: 16 obs (3,405t read) | 446,647t work | 99% savings
### Apr 26, 2026
1306 3:45p 🟣 Added completedLevelCount field to game-data API
1307 " 🔵 Located game-data endpoint controller
1308 " 🔵 Mapped game-data implementation and DTO structure
S1302 Add completedLevelCount to api/v1/user/game-data endpoint with efficient COUNT query (Apr 26 at 3:45 PM)
S1301 Add completedLevelCount field to api/v1/user/game-data endpoint (Apr 26 at 3:45 PM)
1310 " 🔄 Removed completedLevelIds, kept only completedLevelCount
1311 3:46p 🟣 Added countByUserId to repository interface
1309 " 🟣 Added completedLevelCount to game-data API
1312 3:47p 🔄 Refactored getGameData to use COUNT query directly
1313 3:52p 🟣 Game data endpoint refactored with next level logic
1315 3:53p 🟣 Game Level API Redesign for Client-Side Level Progression
1314 3:57p ⚖️ 幽默始祖等级系统设计规则
1316 4:03p ⚖️ Level API Redesign Implementation Plan
S1303 MemeMind-Server API 变更实现:删除 GET /v1/levels、三个接口新增 nextLevel/preloadNextLevel 字段 (Apr 26 at 4:11 PM)
### May 14, 2026
1618 4:20p ✅ Migrating Claude Code settings into Codex
1619 " 🔵 MemeMind-Server already partially migrated to Codex
1620 4:22p 🔵 javascript-typescript-jest skill symlinked from .claude to .agents
1621 " ✅ Migrate-to-codex dry-run completed for MemeMind-Server
1622 4:24p ✅ MemeMind-Server migration to Codex completed and validated
Access 447k tokens of past work via get_observations([IDs]) or mem-search skill.
</claude-mem-context>