package domain type RegisterRequest struct { Username string `json:"username" binding:"required,min=3,max=64"` Email string `json:"email" binding:"required,email"` Password string `json:"password" binding:"required,min=8,max=128"` Nickname string `json:"nickname"` } type LoginRequest struct { Email string `json:"email" binding:"required,email"` Password string `json:"password" binding:"required"` } type ChangePasswordRequest struct { OldPassword string `json:"old_password" binding:"required"` NewPassword string `json:"new_password" binding:"required,min=8,max=128"` } type TokenPair struct { AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` ExpiresIn int `json:"expires_in"` } type UserDTO struct { ID uint `json:"id"` TenantID string `json:"tenant_id"` Username string `json:"username"` Email string `json:"email"` Nickname string `json:"nickname"` Avatar string `json:"avatar"` Status int `json:"status"` LastLogin string `json:"last_login,omitempty"` } func ToUserDTO(u *User) UserDTO { dto := UserDTO{ ID: u.ID, TenantID: u.TenantID, Username: u.Username, Email: u.Email, Nickname: u.Nickname, Avatar: u.Avatar, Status: u.Status, } if u.LastLogin != nil { dto.LastLogin = u.LastLogin.Format("2006-01-02 15:04:05") } return dto } type CreateUserRequest struct { Username string `json:"username" binding:"required,min=3,max=64"` Email string `json:"email" binding:"required,email"` Password string `json:"password" binding:"required,min=8,max=128"` Nickname string `json:"nickname"` Status int `json:"status"` } type UpdateUserRequest struct { Nickname string `json:"nickname"` Email string `json:"email"` Status *int `json:"status"` }