# apps/api — NestJS 10 后端 **生成:** 2026-06-05 **分支:** main ## OVERVIEW NestJS 10 后端,Prisma ORM + SQLite,提供 RESTful API。端口 4000。JWT 认证。 ## STRUCTURE ``` api/ ├── src/ │ ├── admin/ # 管理后台(租户/用户/配置/计划) │ ├── auth/ # JWT + Passport 认证 │ ├── audit-log/ # 审计日志 │ ├── comparison/ # 比价模块 │ ├── crawler/ # 采集器调度 + execSync 调用脚本 │ ├── image/ # 三阶段生图(图库→Bing→AI) │ ├── inquiry/ # 询价 │ ├── lead/ # 线索(核心,评分/状态流转/跟进) │ ├── product/ # 商品 │ ├── reports/ # 报表 │ ├── rules/ # 规则中心 │ ├── users/ # 用户管理 │ ├── prisma/ # Prisma 服务封装 │ ├── common/ # 公共装饰器/过滤器 │ ├── app.module.ts # 根模块(导入所有子模块) │ └── main.ts # 启动入口 └── prisma/ └── schema.prisma # 数据模型(~15 个模型) ``` ## WHERE TO LOOK | 任务 | 位置 | Notes | |------|------|-------| | 新增 API 端点 | `src/xxx/xxx.controller.ts` | ValidationPipe 全局自动转换 | | 修改数据库模型 | `prisma/schema.prisma` | 改后必须 `npm run db:init` | | 采集器调度 | `src/crawler/` | execSync 调用 scripts/tender-fetcher/ | | 图片生成 | `src/image/image.service.ts` | 三阶段流水线 | ## CONVENTIONS - Prisma 变更三步:generate → migrate → seed(`db:init` 一站式) - 采集器脚本路径:`scripts/tender-fetcher/` - 无测试框架 - 端口 4000,CORS 白名单 localhost:3000/3001 + direv.cloud - 静态文件 `/uploads` → `public/uploads` ## ANTI-PATTERNS - 不要在代码中硬编码脚本路径以外的文件路径 - 采集器 state 文件不要手动删除(中电建用 `systemId_招采公告` 作 key)