package model import ( "time" "gorm.io/gorm" ) // User 用户模型 type User struct { ID uint `gorm:"primaryKey" json:"id"` Username string `gorm:"uniqueIndex;not null;size:50" json:"username"` Email string `gorm:"uniqueIndex;not null;size:100" json:"email"` Password string `gorm:"not null;size:255" json:"-"` FirstName string `gorm:"size:50" json:"first_name"` LastName string `gorm:"size:50" json:"last_name"` Avatar string `gorm:"size:255" json:"avatar"` Phone string `gorm:"size:20" json:"phone"` Address string `gorm:"size:255" json:"address"` IsActive bool `gorm:"default:true" json:"is_active"` Role string `gorm:"default:user;size:20" json:"role"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // TableName 指定表名 func (User) TableName() string { return "users" } // BeforeCreate GORM钩子 - 创建前 func (u *User) BeforeCreate(tx *gorm.DB) error { // 这里可以添加密码加密等逻辑 return nil } // BeforeUpdate GORM钩子 - 更新前 func (u *User) BeforeUpdate(tx *gorm.DB) error { // 这里可以添加更新前的逻辑 return nil } // CreateUserRequest 创建用户请求 type CreateUserRequest struct { Username string `json:"username" binding:"required,min=3,max=50"` Email string `json:"email" binding:"required,email"` Password string `json:"password" binding:"required,min=6"` FirstName string `json:"first_name" binding:"max=50"` LastName string `json:"last_name" binding:"max=50"` Phone string `json:"phone" binding:"max=20"` Address string `json:"address" binding:"max=255"` } // UpdateUserRequest 更新用户请求 type UpdateUserRequest struct { FirstName string `json:"first_name" binding:"max=50"` LastName string `json:"last_name" binding:"max=50"` Avatar string `json:"avatar" binding:"max=255"` Phone string `json:"phone" binding:"max=20"` Address string `json:"address" binding:"max=255"` } // LoginRequest 登录请求 type LoginRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } // UserResponse 用户响应 type UserResponse struct { ID uint `json:"id"` Username string `json:"username"` Email string `json:"email"` FirstName string `json:"first_name"` LastName string `json:"last_name"` Avatar string `json:"avatar"` Phone string `json:"phone"` Address string `json:"address"` IsActive bool `json:"is_active"` Role string `json:"role"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // LoginResponse 登录响应 type LoginResponse struct { Token string `json:"token"` User UserResponse `json:"user"` } // ToResponse 转换为响应格式 func (u *User) ToResponse() UserResponse { return UserResponse{ ID: u.ID, Username: u.Username, Email: u.Email, FirstName: u.FirstName, LastName: u.LastName, Avatar: u.Avatar, Phone: u.Phone, Address: u.Address, IsActive: u.IsActive, Role: u.Role, CreatedAt: u.CreatedAt, UpdatedAt: u.UpdatedAt, } }