init
This commit is contained in:
84
serve/internal/models/user.go
Normal file
84
serve/internal/models/user.go
Normal file
@@ -0,0 +1,84 @@
|
||||
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"
|
||||
}
|
||||
Reference in New Issue
Block a user