# 项目过程记录 ## 2025-12-17 ### [任务执行] 初始化模块 yitisheng/yx_user_score - **操作目标**: 创建新的业务模块目录,并准备实现用户分数和志愿管理功能。 - **影响范围**: `server/modules/yitisheng/yx_user_score/` - **修改前记录**: 项目中暂无此模块。 ### [任务执行] 修正模块路径并实现 CRUD - **操作目标**: 根据 Task3.md 要求,将 yx_user_score, yx_volunteer, yx_volunteer_record 实现于 modules/yx/ 下。 - **影响范围**: `server/modules/yx/` - **修改结果**: - 删除了错误的 `modules/yitisheng` 目录(尝试删除)。 - 在 `modules/yx` 下实现了 Entity, Mapper, Service, Controller。 - 更新了 `main.go` 注册路由。 ### [任务执行] 增加 Swagger 文档访问密码验证 - **操作目标**: 为 Swagger 文档接口添加 Basic Auth 验证,防止未授权访问。 - **影响范围**: `server/config/config.go`, `server/main.go` - **修改前记录**: Swagger 接口公开,无验证。 - **修改结果**: - `server/config/config.go`: 新增 `SwaggerConfig` 配置项 (默认 admin/password)。 - `server/main.go`: 为 `/swagger` 路由组添加了 `gin.BasicAuth` 中间件。 ### [任务执行] 解决本地调试 CORS 问题 - **操作目标**: 允许前端 Vue3 项目跨域调用后端接口。 - **影响范围**: `server/middleware/cors.go`, `server/main.go` - **修改前记录**: 后端未配置 CORS,前端跨域请求被拦截。 - **修改结果**: - `server/middleware/cors.go`: 创建了 CORS 中间件,允许 `Origin` 头部指定的来源,并放行 `OPTIONS` 请求。 - `server/main.go`: 全局注册了 CORS 中间件。 ### [任务执行] 实现用户成绩保存接口 - **操作目标**: 根据 Task4.md 要求,实现用户成绩信息的保存接口,并包含特定的业务校验逻辑。 - **影响范围**: `server/modules/yx/controller/yx_user_score_controller.go` - **修改前记录**: `YxUserScoreController` 仅有基本的 CRUD 接口。 - **修改结果**: - 定义了 `SaveScoreRequest` 结构体,包含严格的字段校验逻辑(文理分科、科目限制、成绩范围等)。 - 实现了 `SaveUserScore` 方法,处理 DTO 到 Entity 的转换(包括科目列表拼接、子专业成绩映射)。 - 注册了 `POST /yx-user-scores/save-score` 路由。 ### [任务执行] 重构 DTO 代码结构 - **操作目标**: 将 `SaveScoreRequest` 结构体从 Controller 中分离到独立的 DTO 包中。 - **影响范围**: `server/modules/yx/dto/yx_user_score_dto.go`, `server/modules/yx/controller/yx_user_score_controller.go` - **修改前记录**: DTO 结构体直接定义在 Controller 文件中。 - **修改结果**: - 创建了 `server/modules/yx/dto/` 目录。 - 将 `SaveScoreRequest` 及其校验逻辑移动到 `yx_user_score_dto.go`。 - Controller 改为引用 `dto` 包。 ### [任务执行] 处理 UserScoreVO 信息转换 - **操作目标**: 在 `UserScoreService` 中实现 Entity 到 VO 的转换,并完善 `UserScoreVO` 定义。 - **影响范围**: `server/modules/user/vo/user_score_vo.go`, `server/modules/user/service/user_score_service.go` - **修改前记录**: `UserScoreVO` 为空,`GetActiveByID` 返回原始 Entity。 - **修改结果**: - 定义了 `UserScoreVO` 结构体,其字段设计参考了 `SaveScoreRequest`。 - 在 `UserScoreService` 中实现了 `convertEntityToVo` 私有方法,处理了逗号分隔字符串到切片的转换,以及具体分数字段到 Map 的映射。 - 更新 `GetActiveByID` 返回 `UserScoreVO` 对象。 ### [任务执行] 增加用户成绩分页列表接口 - **操作目标**: 在 `UserScoreController` 和 `UserScoreService` 中增加获取当前用户所有成绩的分页列表接口。 - **影响范围**: `server/modules/user/service/user_score_service.go`, `server/modules/user/controller/user_score_controller.go` - **修改前记录**: 仅支持获取当前激活的单条成绩。 - **修改结果**: - 在 `UserScoreService` 中实现了 `ListByUser` 方法,支持分页查询并返回 VO 列表。 - 在 `UserScoreController` 中增加了 `List` 方法,并注册了 `GET /user/score/list` 路由。 ### [任务执行] 统一管理 Redis Key 及全局常量 - **操作目标**: 创建专门存放 Redis Key 和业务常量的地方,并重构相关代码以引用这些常量。 - **影响范围**: `server/common/constants.go`, `server/modules/system/service/sys_user_service.go`, `server/middleware/auth.go`, `server/common/context.go` - **修改前记录**: 常量散落在各个业务文件和中间件中,存在硬编码和重复定义。 - **修改结果**: - 创建了 `server/common/constants.go`,集中管理 Redis 前缀、Token 请求头、业务状态码等。 - 重构了 `SysUserService`,使用 `common.RedisTokenPrefix` 和 `common.RedisTokenExpire`。 - 重构了 `AuthMiddleware`,使用 `common.TokenHeader` 和 `common.ContextUserKey`。 - 清理了 `common/context.go` 中的重复定义。