## 后端实现 - 添加考试数据模型 (Exam) - 实现考试生成API (/api/exam/generate) - 实现获取考试详情API (/api/exam/:id) - 实现提交考试API (/api/exam/:id/submit) - 支持按题型随机抽取题目 - AI智能评分(简答题和论述题) - 自动计算总分和详细评分 ## 前端实现 - 首页添加"模拟考试"入口 - 考试准备页:显示考试说明,选择在线/打印模式 - 在线答题页:按题型分组显示,支持论述题二选一 - 试卷打印页:A4排版,支持打印试卷/答案 - 成绩报告页:显示总分、详细评分、错题分析 ## 核心特性 - 随机组卷:填空10题、判断10题、单选10题、多选10题、简答2题、论述题2选1 - 智能评分:使用AI评分论述题,给出分数、评语和建议 - 答题进度保存:使用localStorage防止刷新丢失 - 打印优化:A4纸张、黑白打印、合理排版 - 响应式设计:适配移动端、平板和PC端 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
55 lines
1.3 KiB
Go
55 lines
1.3 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.WrongQuestionHistory{}, // 错题历史表
|
|
&models.WrongQuestionTag{}, // 错题标签表
|
|
&models.UserAnswerRecord{}, // 用户答题记录表
|
|
&models.Exam{}, // 考试表
|
|
)
|
|
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
|
|
}
|