**统计功能**: - 新增UserAnswerRecord模型记录用户答题历史 - 实现GetStatistics接口,统计题库总数、已答题数、正确率 - 在提交答案时自动记录答题历史 - 前端连接真实统计接口,显示实时数据 **认证系统优化**: - 新增Auth中间件,实现基于Token的身份验证 - 登录和注册时自动生成并保存Token到数据库 - 所有需要登录的接口都通过Auth中间件保护 - 统一处理未授权请求,返回401状态码 **错题练习功能**: - 新增GetRandomWrongQuestion接口,随机获取错题 - 支持错题练习模式(/question?mode=wrong) - 优化错题本页面UI,移除已掌握功能 - 新增"开始错题练习"按钮,直接进入练习模式 **数据库迁移**: - 新增user_answer_records表,记录用户答题历史 - User表新增token字段,存储用户登录凭证 **技术改进**: - 统一错误处理,区分401未授权和404未找到 - 优化答题流程,记录历史和错题分离处理 - 移除异步记录错题,改为同步处理保证数据一致性 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package database
|
|
|
|
import (
|
|
"ankao/internal/models"
|
|
"ankao/pkg/config"
|
|
"fmt"
|
|
"log"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
// InitDB 初始化数据库连接
|
|
func InitDB() error {
|
|
cfg := config.GetDatabaseConfig()
|
|
dsn := cfg.GetDSN()
|
|
|
|
var err error
|
|
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info), // 开启SQL日志
|
|
DisableForeignKeyConstraintWhenMigrating: true, // 迁移时禁用外键约束
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to connect to database: %w", err)
|
|
}
|
|
|
|
log.Println("Database connected successfully")
|
|
|
|
// 自动迁移数据库表结构
|
|
err = DB.AutoMigrate(
|
|
&models.User{},
|
|
&models.PracticeQuestion{},
|
|
&models.WrongQuestion{}, // 添加错题表
|
|
&models.UserAnswerRecord{}, // 添加用户答题记录表
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to migrate database: %w", err)
|
|
}
|
|
|
|
log.Println("Database migration completed")
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetDB 获取数据库实例
|
|
func GetDB() *gorm.DB {
|
|
return DB
|
|
}
|