package models import ( "time" "gorm.io/gorm" ) // User 用户模型 type User struct { ID uint `gorm:"primaryKey" json:"id"` Username string `gorm:"size:50;not null;unique" json:"username"` Email string `gorm:"size:100;not null;unique" json:"email"` Password string `gorm:"size:255;not null" json:"-"` Name string `gorm:"size:100" json:"name"` Avatar string `gorm:"size:500" json:"avatar"` Role string `gorm:"size:20;default:user" json:"role"` IsActive bool `gorm:"default:true" json:"is_active"` LastLogin *time.Time `json:"last_login"` 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" } // UserRole 用户角色常量 const ( RoleUser = "user" RoleEditor = "editor" RoleAdmin = "admin" ) // 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"` Name string `json:"name" binding:"max=100"` Role string `json:"role" binding:"omitempty,oneof=user editor admin"` } // UpdateUserRequest 更新用户请求 type UpdateUserRequest struct { Name *string `json:"name" binding:"omitempty,max=100"` Avatar *string `json:"avatar" binding:"omitempty,max=500"` IsActive *bool `json:"is_active"` } // UpdatePasswordRequest 更新密码请求 type UpdatePasswordRequest struct { OldPassword string `json:"old_password" binding:"required"` NewPassword string `json:"new_password" binding:"required,min=6"` } // LoginRequest 登录请求 type LoginRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } // LoginResponse 登录响应 type LoginResponse struct { AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` TokenType string `json:"token_type"` ExpiresIn int64 `json:"expires_in"` User *User `json:"user"` } // RefreshTokenRequest 刷新令牌请求 type RefreshTokenRequest struct { RefreshToken string `json:"refresh_token" binding:"required"` }