Files
2025-11-17 13:39:05 +08:00

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"
}