60 lines
3.4 KiB
Go
60 lines
3.4 KiB
Go
|
|
package models
|
||
|
|
|
||
|
|
import (
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"gorm.io/gorm"
|
||
|
|
)
|
||
|
|
|
||
|
|
// StudyPlan 学习计划模型
|
||
|
|
type StudyPlan struct {
|
||
|
|
ID int64 `json:"id" gorm:"type:bigint;primaryKey;autoIncrement;comment:计划ID"`
|
||
|
|
UserID int64 `json:"user_id" gorm:"type:bigint;not null;index;comment:用户ID"`
|
||
|
|
BookID *string `json:"book_id" gorm:"type:varchar(36);index;comment:词汇书ID(可选)"`
|
||
|
|
PlanName string `json:"plan_name" gorm:"type:varchar(200);not null;comment:计划名称"`
|
||
|
|
Description *string `json:"description" gorm:"type:text;comment:计划描述"`
|
||
|
|
DailyGoal int `json:"daily_goal" gorm:"type:int;not null;default:20;comment:每日目标单词数"`
|
||
|
|
TotalWords int `json:"total_words" gorm:"type:int;default:0;comment:计划总单词数"`
|
||
|
|
LearnedWords int `json:"learned_words" gorm:"type:int;default:0;comment:已学单词数"`
|
||
|
|
StartDate time.Time `json:"start_date" gorm:"type:date;not null;comment:开始日期"`
|
||
|
|
EndDate *time.Time `json:"end_date" gorm:"type:date;comment:结束日期"`
|
||
|
|
Status string `json:"status" gorm:"type:enum('active','paused','completed','cancelled');default:'active';comment:计划状态"`
|
||
|
|
RemindTime *string `json:"remind_time" gorm:"type:varchar(10);comment:提醒时间(HH:mm格式)"`
|
||
|
|
RemindDays *string `json:"remind_days" gorm:"type:varchar(20);comment:提醒日期(1,2,3..7表示周一到周日)"`
|
||
|
|
IsRemindEnabled bool `json:"is_remind_enabled" gorm:"type:boolean;default:false;comment:是否启用提醒"`
|
||
|
|
LastStudyDate *time.Time `json:"last_study_date" gorm:"type:date;comment:最后学习日期"`
|
||
|
|
StreakDays int `json:"streak_days" gorm:"type:int;default:0;comment:连续学习天数"`
|
||
|
|
CompletedAt *time.Time `json:"completed_at" gorm:"type:timestamp;comment:完成时间"`
|
||
|
|
CreatedAt time.Time `json:"created_at" gorm:"type:timestamp;default:CURRENT_TIMESTAMP;comment:创建时间"`
|
||
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"type:timestamp;default:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;comment:更新时间"`
|
||
|
|
DeletedAt gorm.DeletedAt `json:"-" gorm:"index;comment:删除时间"`
|
||
|
|
|
||
|
|
// 关联关系
|
||
|
|
User User `json:"-" gorm:"foreignKey:UserID"`
|
||
|
|
Book *VocabularyBook `json:"book,omitempty" gorm:"-"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (StudyPlan) TableName() string {
|
||
|
|
return "ai_study_plans"
|
||
|
|
}
|
||
|
|
|
||
|
|
// StudyPlanRecord 学习计划完成记录
|
||
|
|
type StudyPlanRecord struct {
|
||
|
|
ID int64 `json:"id" gorm:"type:bigint;primaryKey;autoIncrement;comment:记录ID"`
|
||
|
|
PlanID int64 `json:"plan_id" gorm:"type:bigint;not null;index;comment:计划ID"`
|
||
|
|
UserID int64 `json:"user_id" gorm:"type:bigint;not null;index;comment:用户ID"`
|
||
|
|
StudyDate time.Time `json:"study_date" gorm:"type:date;not null;index;comment:学习日期"`
|
||
|
|
WordsStudied int `json:"words_studied" gorm:"type:int;default:0;comment:学习单词数"`
|
||
|
|
GoalCompleted bool `json:"goal_completed" gorm:"type:boolean;default:false;comment:是否完成目标"`
|
||
|
|
StudyDuration int `json:"study_duration" gorm:"type:int;default:0;comment:学习时长(分钟)"`
|
||
|
|
CreatedAt time.Time `json:"created_at" gorm:"type:timestamp;default:CURRENT_TIMESTAMP;comment:创建时间"`
|
||
|
|
|
||
|
|
// 关联关系
|
||
|
|
Plan StudyPlan `json:"-" gorm:"foreignKey:PlanID"`
|
||
|
|
User User `json:"-" gorm:"foreignKey:UserID"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (StudyPlanRecord) TableName() string {
|
||
|
|
return "ai_study_plan_records"
|
||
|
|
}
|