package models import ( "time" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) // User 用户结构 type User struct { ID uint `gorm:"primaryKey" json:"id"` Username string `gorm:"uniqueIndex;not null;size:50" json:"username"` Password string `gorm:"not null;size:255" json:"-"` // json:"-" 表示在JSON响应中不返回密码 Token string `gorm:"size:255;index" json:"-"` // 用户登录token Avatar string `gorm:"size:255" json:"avatar"` Nickname string `gorm:"size:50" json:"nickname"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // HashPassword 加密密码 func (u *User) HashPassword(password string) error { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } u.Password = string(hashedPassword) return nil } // CheckPassword 验证密码 func (u *User) CheckPassword(password string) bool { err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password)) return err == nil } // UserData 存储所有用户的结构(用于兼容旧的文件存储方式) type UserData map[string]User // LoginRequest 登录请求 type LoginRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } // LoginResponse 登录响应 type LoginResponse struct { Token string `json:"token"` User UserInfoResponse `json:"user"` } // UserInfoResponse 用户信息响应(不包含密码) type UserInfoResponse struct { Username string `json:"username"` Avatar string `json:"avatar"` Nickname string `json:"nickname"` } // RegisterRequest 注册请求 type RegisterRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required,min=6"` Nickname string `json:"nickname"` }