feat: 初始化 OnceLove GraphRAG 项目基础架构

- 添加完整的项目结构,包括前端(Vue3 + Vite)、后端(Fastify)和基础设施配置
- 实现核心 GraphRAG 服务,集成 Neo4j 图数据库和 Qdrant 向量数据库
- 添加用户认证系统和管理员登录界面
- 提供 Docker 容器化部署方案和开发环境配置
- 包含项目文档、API 文档(Swagger)和测试脚本
This commit is contained in:
KOSHM-Pig
2026-03-23 00:00:13 +08:00
commit ec21df7aa6
50 changed files with 7459 additions and 0 deletions

117
OnceLove/README.md Normal file
View File

@@ -0,0 +1,117 @@
## 开发规范
### 项目结构规范
project /
├── src / 程序源码文件目录
│ ├── config / 配置目录
│ │ ├── swagger.js swagger 配置文件
│ │ └── logger.js 日志配置文件
│ │
│ ├── controllers / 控制器目录
│ │ ├── *.controller.js 控制器文件
│ │ └── index.js 控制器索引文件
│ │
│ ├── models / 模型目录
│ │ ├── *.model.js 模型文件
│ │ └── index.js 模型索引文件
│ │
│ ├── routes / 路由目录
│ │ ├── *.route.js 路由文件
│ │ └── index.js 路由索引文件
│ │
│ ├── services / 服务目录
│ │ ├── *.service.js 服务文件
│ │ └── index.js 服务索引文件
│ └── server.js 服务器入口文件
├── docs / 用于存储AI提示文档
│ └── *.md 文档文件
├── .env 环境变量配置文件
├── package.json 项目依赖配置文件
├── .gitignore git 忽略文件配置
├── package-lock.json 项目依赖锁文件
└── README.md 项目说明文档
### controllers、models、routes 规范
- 每个目录下的文件都要符合命名规范
- 控制器文件:`*.controller.js`
- 模型文件:`*.model.js`
- 路由文件:`*.route.js`
并统一由index.js导出
- controllers/index.js
- models/index.js
- routes/index.js
### swagger 规范
- 每个路由文件都要包含路由的详细信息,包括请求方法、路径、参数、响应等。
- 路由文件的注释要符合 swagger 规范,使用 jsdoc 格式。
- 每个模型文件都要包含模型的详细信息,包括属性、类型、是否必填等。
- 模型文件的注释要符合 swagger 规范,使用 jsdoc 格式。
### 运行与脚本
- 开发启动:`npm run dev`
- 普通启动:`npm run start`
- 文档入口:`/api-docs`
### 环境变量规范
- 使用 `dotenv` 加载 `.env`(入口:`src/server.js`
- 变量约定:
- `PORT`:服务监听端口,默认 `3000`
- `APPLICATION_URL`:对外服务基址,用于 Swagger `servers`(未设置回退为 `http://localhost:${PORT}`
- `LOG_LEVEL`:日志级别,默认 `info`(可选 `error|warn|info|debug`
- 安全要求:不记录/提交敏感信息,`.gitignore` 已忽略 `.env``logs/`
### 日志规范
- 日志库:`winston`(配置:`src/config/logger.js`
- 级别:`error``warn``info``debug`
- 输出:
- 控制台(彩色,便于开发)
- 文件:`logs/app.log`(综合)、`logs/error.log`(错误)
- 请求日志:在 `src/server.js` 统一中间件记录 `method path status 耗时`,错误 `>=500``error``>=400``warn`
- 全局错误处理:`src/server.js` 捕获未处理异常并输出结构化错误,响应 `500`
- 规范:避免日志中出现令牌、密钥、密码等敏感信息
### swagger-jsdoc 配置与注释规范
- 配置位置:`src/config/swagger.js``createSwaggerSpec(serverUrl)`
- 扫描范围:`apis: ['src/**/*.js']`
- 路由注释:放在 `src/routes/*.route.js`,使用 `@openapi` JSDoc 块定义路径、方法、请求参数与响应
- 模型注释:可使用 `components/schemas` 定义结构体并在路由注释中引用
- 文档 UI`swagger-ui-express` 挂载于 `/api-docs`
### 分层规范
- 路由(`routes`)只负责参数解析与转发,不直接书写异步业务逻辑
- 控制器(`controllers`)承载业务流程编排,必要时调用 `services`
- 服务(`services`)聚合外部 API、内部模块调用保持可测试性
- 模型(`models`)声明数据结构(如后续有数据库或 DTO 定义)
- 统一导出:各层使用 `index.js` 聚合导出,便于维护与扫描
### 参考实现
- 路由聚合:`src/routes/index.js`
- 根路由与注释:`src/routes/root.route.js`
- 控制器:`src/controllers/root.controller.js`
- Swagger 配置:`src/config/swagger.js`
- 日志配置:`src/config/logger.js`
- 入口挂载:`src/server.js`
### 异步编程规范
- 所有异步操作都要使用 `async/await``Promise` 处理,避免回调地狱
- 控制器中调用服务时,要确保服务返回 `Promise`,并在控制器中 `await` 其结果
- 服务中调用外部 API 或数据库操作时,要确保返回 `Promise`,并在服务中 `await` 其结果
- 路由中处理异步操作时,要确保捕获异常并返回结构化错误响应
- 必须使用try...catch捕获异步操作中的异常避免未处理异常导致服务崩溃