updates
This commit is contained in:
parent
0c787bc441
commit
59b7bde12e
|
|
@ -8,7 +8,9 @@
|
|||
- `Error(c *gin.Context, code int, msg string)`: 发送错误响应。
|
||||
|
||||
## server/config
|
||||
- `LoadConfig()`: 从 YAML 文件加载配置,根据 `GO_ENV` 环境变量选择配置文件(默认 dev)。
|
||||
- `LoadConfig()`: 加载配置。
|
||||
- 优先级1:命令行参数 `-c` 或 `-config` 指定的文件。
|
||||
- 优先级2:环境变量 `GO_ENV` 决定的文件(查找顺序:`./config.{env}.yaml` -> `config/config.{env}.yaml` -> `../config/config.{env}.yaml`)。
|
||||
- `InitDB()`: 初始化GORM数据库连接,支持 SQL 日志配置(自动写入 `logs/sql-YYYY-MM-DD.log`)。
|
||||
- `InitRedis()`: 初始化Redis客户端。
|
||||
- `AppConfig`: 全局配置变量,包含 `Log`, `Security`, `RateLimit`, `Swagger`, `Database`, `Redis` 配置。
|
||||
|
|
|
|||
|
|
@ -1,26 +1,13 @@
|
|||
|
||||
### [任务执行] 修复 SQL 日志未写入文件问题
|
||||
- **操作目标**: 修改数据库初始化逻辑,使其支持将 SQL 日志写入到指定文件。
|
||||
- **影响范围**: `server/config/database.go`
|
||||
- **修改前记录**: GORM Logger 硬编码输出到 `os.Stdout`。
|
||||
- **修改结果**:
|
||||
- 在 `server/config/database.go` 中增加了 `getLogWriter` 函数。
|
||||
- 该函数根据 `AppConfig.Log` 配置创建日志目录和文件(命名为 `sql-YYYY-MM-DD.log`)。
|
||||
- 如果配置开启了控制台输出,则使用 `io.MultiWriter` 同时输出到文件和控制台。
|
||||
- 验证:在测试环境下临时开启日志模式,成功生成了 `logs/sql-2025-12-25.log` 文件。
|
||||
|
||||
### [任务执行] 支持计算专业表的动态表名插入
|
||||
### [任务执行] 优化配置加载逻辑
|
||||
- **时间戳**: 2026-01-02
|
||||
- **关联任务**: 动态表名支持
|
||||
- **操作目标**: 修改 `YxCalculationMajorService` 和 `YxCalculationMajorMapper` 以支持根据用户成绩中的 `CalculationTableName` 动态插入数据。
|
||||
- **影响范围**:
|
||||
- `server/modules/yx/mapper/yx_calculation_major_mapper.go`
|
||||
- `server/modules/yx/service/yx_calculation_major_service.go`
|
||||
- `server/modules/user/service/user_score_service.go`
|
||||
- `server/modules/yx/controller/yx_calculation_major_controller.go`
|
||||
- **关联任务**: 优化配置加载
|
||||
- **操作目标**: 增强 `LoadConfig`,支持命令行参数指定配置文件,并优化查找顺序。
|
||||
- **影响范围**: `server/config/config.go`
|
||||
- **修改前记录**: 仅通过 `GO_ENV` 决定文件名,并在 `config/` 或上级目录查找。
|
||||
- **修改结果**:
|
||||
- `YxCalculationMajorMapper.BatchCreate` 增加 `tableName` 参数,支持 `db.Table(tableName)`。
|
||||
- `YxCalculationMajorService.BatchCreate` 和 `BatchCreateBySchoolMajorDTO` 增加 `tableName` 参数并透传。
|
||||
- `UserScoreService.SaveUserScore` 调用 `BatchCreateBySchoolMajorDTO` 时传入 `entityItem.CalculationTableName`。
|
||||
- `YxCalculationMajorController.BatchCreate` 传入空字符串以使用默认表名。
|
||||
- **[新增]**: 修复了 `FindRecommendList` 中表名参数传递错误的问题,改为使用 `fmt.Sprintf` 动态注入表名。
|
||||
1. **命令行参数**: 优先检查 `-c` 或 `-config` 参数,如果存在则直接使用指定的配置文件。
|
||||
2. **查找顺序优化**:
|
||||
* `./config.{env}.yaml` (当前目录,方便生产部署)
|
||||
* `./config/config.{env}.yaml` (开发环境)
|
||||
* `../config/config.{env}.yaml` (测试环境)
|
||||
|
|
|
|||
|
|
@ -77,19 +77,45 @@ type RedisConfig struct {
|
|||
|
||||
// LoadConfig 加载配置
|
||||
func LoadConfig() {
|
||||
env := os.Getenv("GO_ENV")
|
||||
if env == "" {
|
||||
env = "dev"
|
||||
var configFile string
|
||||
|
||||
// 1. 优先检查命令行参数 (简单解析)
|
||||
// 格式: ./app -c config.prod.yaml 或 ./app -config config.prod.yaml
|
||||
args := os.Args
|
||||
for i, arg := range args {
|
||||
if (arg == "-c" || arg == "-config") && i+1 < len(args) {
|
||||
configFile = args[i+1]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
configFile := fmt.Sprintf("config/config.%s.yaml", env)
|
||||
// 如果是测试环境,可能需要从上级目录查找,这里简单处理,如果找不到尝试从根目录找
|
||||
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
||||
// 尝试在当前目录下找 (比如在 server 目录下运行)
|
||||
configFile = fmt.Sprintf("config.%s.yaml", env)
|
||||
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
||||
// 如果是单元测试,可能在 tests 目录下
|
||||
configFile = fmt.Sprintf("../config/config.%s.yaml", env)
|
||||
// 2. 如果命令行参数未指定,则根据环境变量查找
|
||||
if configFile == "" {
|
||||
env := os.Getenv("GO_ENV")
|
||||
if env == "" {
|
||||
env = "dev"
|
||||
}
|
||||
|
||||
// 查找顺序:
|
||||
// 1. 当前目录 config.{env}.yaml (方便部署时直接放在执行文件旁)
|
||||
// 2. config/config.{env}.yaml (开发习惯)
|
||||
// 3. ../config/config.{env}.yaml (测试环境习惯)
|
||||
searchPaths := []string{
|
||||
fmt.Sprintf("config.%s.yaml", env),
|
||||
fmt.Sprintf("config/config.%s.yaml", env),
|
||||
fmt.Sprintf("../config/config.%s.yaml", env),
|
||||
}
|
||||
|
||||
for _, path := range searchPaths {
|
||||
if _, err := os.Stat(path); err == nil {
|
||||
configFile = path
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// 如果都没找到,默认回退到 config/config.{env}.yaml 以便报错信息准确
|
||||
if configFile == "" {
|
||||
configFile = fmt.Sprintf("config/config.%s.yaml", env)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,8 @@
|
|||
|
||||
## 会话 ID: 20251225-02
|
||||
- **执行原因**: 用户反馈 SQL 日志未写入文件。
|
||||
## 会话 ID: 20260102-02
|
||||
- **执行原因**: 用户希望在运行时通过命令行参数指定配置文件,并优化配置文件查找逻辑,优先使用当前目录下的文件。
|
||||
- **执行过程**:
|
||||
1. 分析发现 `server/config/database.go` 中 GORM Logger 硬编码输出到 `os.Stdout`。
|
||||
2. 在 `server/config/database.go` 中实现 `getLogWriter` 函数,根据配置创建文件 Writer。
|
||||
3. 使用 `io.MultiWriter` 支持同时输出到文件和控制台。
|
||||
4. 验证日志文件生成。
|
||||
- **执行结果**: SQL 日志现在会根据日期生成独立的文件(如 `logs/sql-2025-12-25.log`),且遵循全局日志配置。
|
||||
|
||||
## 会话 ID: 20260102-01
|
||||
- **执行原因**: 用户询问如何在 `UserScoreService` 中根据 `CalculationTableName` 动态插入数据,并修复了 Mapper 中的查询 Bug。
|
||||
- **执行过程**:
|
||||
1. 分析 `YxCalculationMajorService` 和 Mapper,发现默认使用硬编码的表名。
|
||||
2. 修改 `YxCalculationMajorMapper.BatchCreate` 增加 `tableName` 参数。
|
||||
3. 修改 `YxCalculationMajorService.BatchCreate` 和 `BatchCreateBySchoolMajorDTO` 增加 `tableName` 参数。
|
||||
4. 更新 `UserScoreService` 调用处,传入 `entityItem.CalculationTableName`。
|
||||
5. 更新 `YxCalculationMajorController` 调用处,传入空字符串以保持默认行为。
|
||||
6. **[修复]** 发现 `FindRecommendList` 中错误地将表名作为参数传递给 `?` 占位符。修改为使用 `fmt.Sprintf` 动态构建 SQL,并移除了无效的字符串替换逻辑。
|
||||
- **执行结果**: 实现了计算专业表的动态表名插入功能,并修复了推荐列表查询的 SQL 语法错误。
|
||||
1. 修改 `server/config/config.go` 中的 `LoadConfig` 函数。
|
||||
2. 增加命令行参数解析逻辑,支持 `-c` 或 `-config` 参数。
|
||||
3. 调整配置文件查找顺序:优先检查 `config.{env}.yaml`(当前目录),其次是 `config/config.{env}.yaml`,最后是上级目录。
|
||||
- **执行结果**: 现在可以通过命令行参数指定配置文件,或者直接将配置文件放在可执行文件同级目录下,无需严格依赖 `config/` 目录结构。
|
||||
|
|
|
|||
Loading…
Reference in New Issue