优化体验,修复 bug
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
schema_version: 1
|
||||
module_path: backend
|
||||
title: 音频设备管理后端 API
|
||||
scope:
|
||||
- backend/
|
||||
source_files: []
|
||||
depends_on: []
|
||||
related_to:
|
||||
- path: frontend
|
||||
@@ -0,0 +1,5 @@
|
||||
- **运行时与框架**:Node.js 22 (Alpine), Express.js v4。
|
||||
- **数据持久化**:MySQL (via `mysql2` and `sequelize` ORM)。
|
||||
- **缓存与搜索**:Redis (via `ioredis` for EQ cache), Meilisearch (via `axios` for model search)。
|
||||
- **文件存储**:AWS S3 (via `@aws-sdk/client-s3` for OTA packages and measurement files)。
|
||||
- **工具库**:`jsonwebtoken` (JWT), `zod` (Schema 验证), `multer` (文件上传), `winston` (日志)。
|
||||
@@ -0,0 +1,5 @@
|
||||
- **分层架构**:采用经典的 MVC 模式,`routes/` 处理 HTTP 请求与响应,`models/` (Sequelize) 定义数据模型,`services/` 封装外部存储(S3, Redis)和业务逻辑。
|
||||
- **入口与初始化**:`src/app.js` 为应用入口,负责加载环境变量、同步数据库表结构 (`sequelize.sync()`) 并引导创建超级管理员 (`userBootstrap`)。
|
||||
- **路由组织**:`src/routes/index.js` 汇总所有业务路由(auth, brands, models, ota 等),通过 Express 中间件机制挂载。
|
||||
- **认证机制**:`middleware/auth.js` 实现基于 JWT 的身份验证,支持普通用户登录与超级管理员权限校验 (`requireSuperAdmin`)。
|
||||
- **外部集成**:通过 `services/` 目录下的模块与 AWS S3 (文件存储)、Redis (EQ 缓存)、Meilisearch (搜索索引) 及远程曲线服务进行交互。
|
||||
@@ -0,0 +1 @@
|
||||
提供耳机品牌、型号、OTA 升级及用户管理的 RESTful API,集成 MySQL、Redis、S3 和 Meilisearch。
|
||||
@@ -0,0 +1,3 @@
|
||||
- **依赖管理**:使用 `pnpm` 作为包管理器 (`packageManager: pnpm@11.5.2`),安装命令为 `pnpm install --frozen-lockfile`。
|
||||
- **启动脚本**:提供 `start.sh`, `stop.sh`, `restart.sh` 用于进程管理;Docker 镜像基于 `node:22-alpine` 构建。
|
||||
- **环境引导**:首次启动时会自动执行 `ensureBootstrapSuperAdmin`,若数据库无用户则根据环境变量 `DASHBOARD_ADMIN_USERNAME/PASSWORD` 创建初始超级管理员。
|
||||
@@ -0,0 +1,4 @@
|
||||
- 统一响应格式:所有 API 均通过 `utils/response.js` 中的 `ApiResponse` 对象返回标准化 JSON,包含 `code` (1:成功, 0:错误, 2:无数据), `msg` 和 `data` 字段。
|
||||
- 集中式日志记录:使用 `winston` 配置的 `logger` 记录关键业务操作(如登录、创建/更新/删除资源)及错误信息,日志输出至 `logs/app.log`。
|
||||
- 路由级认证保护:受保护的路由组(如 brands, models, ota)在路由文件顶部通过 `router.use(authMiddleware)` 全局启用 JWT 验证,仅公开接口(如 `/health`, `/api/ota/latest/check`)例外。
|
||||
- 参数空值处理:在更新操作中,显式检查请求体字段是否为 `undefined` 或 `'null'` 字符串,以区分“未提供”与“设为空”,避免意外覆盖现有数据。
|
||||
Reference in New Issue
Block a user