84 lines
5.4 KiB
Go
84 lines
5.4 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// User 用户模型
|
|
type User struct {
|
|
ID int64 `json:"id" gorm:"type:bigint;primaryKey;autoIncrement;comment:用户ID"`
|
|
Username string `json:"username" gorm:"type:varchar(50);uniqueIndex;not null;comment:用户名"`
|
|
Email string `json:"email" gorm:"type:varchar(100);uniqueIndex;not null;comment:邮箱"`
|
|
Phone *string `json:"phone" gorm:"type:varchar(20);uniqueIndex;comment:手机号"`
|
|
PasswordHash string `json:"-" gorm:"type:varchar(255);not null;comment:密码哈希"`
|
|
Nickname *string `json:"nickname" gorm:"type:varchar(100);comment:昵称"`
|
|
Avatar *string `json:"avatar" gorm:"type:varchar(500);comment:头像URL"`
|
|
Gender *string `json:"gender" gorm:"type:enum('male','female','other');comment:性别"`
|
|
BirthDate *time.Time `json:"birth_date" gorm:"type:date;comment:出生日期"`
|
|
Bio *string `json:"bio" gorm:"type:text;comment:个人简介"`
|
|
Location *string `json:"location" gorm:"type:varchar(100);comment:所在地"`
|
|
Timezone string `json:"timezone" gorm:"type:varchar(50);default:'Asia/Shanghai';comment:时区"`
|
|
Language string `json:"language" gorm:"type:varchar(10);default:'zh-CN';comment:界面语言"`
|
|
EmailVerified bool `json:"email_verified" gorm:"type:boolean;default:false;comment:邮箱是否验证"`
|
|
PhoneVerified bool `json:"phone_verified" gorm:"type:boolean;default:false;comment:手机是否验证"`
|
|
Status string `json:"status" gorm:"type:enum('active','inactive','suspended','deleted');default:'active';comment:账户状态"`
|
|
LastLoginAt *time.Time `json:"last_login_at" gorm:"type:timestamp;comment:最后登录时间"`
|
|
LastLoginIP *string `json:"last_login_ip" gorm:"type:varchar(45);comment:最后登录IP"`
|
|
LoginCount int `json:"login_count" gorm:"type:int;default:0;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:删除时间"`
|
|
|
|
// 关联关系
|
|
SocialLinks []UserSocialLink `json:"social_links,omitempty"`
|
|
Preferences *UserPreference `json:"preferences,omitempty"`
|
|
VocabularyProgress []UserVocabularyProgress `json:"vocabulary_progress,omitempty"`
|
|
}
|
|
|
|
// UserSocialLink 用户社交链接模型
|
|
type UserSocialLink 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"`
|
|
Platform string `json:"platform" gorm:"type:varchar(50);not null;comment:平台名称"`
|
|
URL string `json:"url" gorm:"type:varchar(500);not null;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:更新时间"`
|
|
|
|
// 关联关系
|
|
User User `json:"-"`
|
|
}
|
|
|
|
// UserPreference 用户偏好设置模型
|
|
type UserPreference struct {
|
|
ID int64 `json:"id" gorm:"type:bigint;primaryKey;autoIncrement;comment:ID"`
|
|
UserID int64 `json:"user_id" gorm:"type:bigint;uniqueIndex;not null;comment:用户ID"`
|
|
DailyGoal int `json:"daily_goal" gorm:"type:int;default:50;comment:每日学习目标(分钟)"`
|
|
WeeklyGoal int `json:"weekly_goal" gorm:"type:int;default:350;comment:每周学习目标(分钟)"`
|
|
ReminderEnabled bool `json:"reminder_enabled" gorm:"type:boolean;default:true;comment:是否启用提醒"`
|
|
ReminderTime *string `json:"reminder_time" gorm:"type:time;comment:提醒时间"`
|
|
DifficultyLevel string `json:"difficulty_level" gorm:"type:enum('beginner','intermediate','advanced');default:'beginner';comment:难度级别"`
|
|
LearningMode string `json:"learning_mode" gorm:"type:enum('casual','intensive','exam_prep');default:'casual';comment:学习模式"`
|
|
PreferredTopics *string `json:"preferred_topics" gorm:"type:json;comment:偏好话题(JSON数组)"`
|
|
NotificationSettings *string `json:"notification_settings" gorm:"type:json;comment:通知设置(JSON对象)"`
|
|
PrivacySettings *string `json:"privacy_settings" gorm:"type:json;comment:隐私设置(JSON对象)"`
|
|
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:更新时间"`
|
|
|
|
// 关联关系
|
|
User User `json:"-"`
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (User) TableName() string {
|
|
return "ai_users"
|
|
}
|
|
|
|
func (UserSocialLink) TableName() string {
|
|
return "ai_user_social_links"
|
|
}
|
|
|
|
func (UserPreference) TableName() string {
|
|
return "ai_user_preferences"
|
|
} |