package model import "time" // LoginRequest 登录请求 type LoginRequest struct { Username string `json:"username" binding:"required" validate:"required,min=3,max=50"` Password string `json:"password" binding:"required" validate:"required,min=6,max=100"` Captcha string `json:"captcha" binding:"required" validate:"required,len=4"` CaptchaID string `json:"captcha_id" binding:"required" validate:"required"` ClientIP string `json:"client_ip"` // 客户端IP地址 } // LoginResponse 登录响应 type LoginResponse struct { Token string `json:"token"` TokenType string `json:"token_type"` ExpiresIn int64 `json:"expires_in"` RefreshToken string `json:"refresh_token"` User UserInfo `json:"user"` ForceChangePassword bool `json:"force_change_password"` // 是否需要强制修改密码 } // UserInfo 用户信息(登录后返回) type UserInfo struct { ID uint `json:"id"` Username string `json:"username"` Email string `json:"email"` Phone string `json:"phone"` Status int `json:"status"` CreatedAt time.Time `json:"created_at"` LastLoginAt *time.Time `json:"last_login_at,omitempty"` LastLoginIP string `json:"last_login_ip,omitempty"` Roles []RoleInfo `json:"roles"` } // RoleInfo 角色信息 type RoleInfo struct { ID uint `json:"id"` Name string `json:"name"` Code string `json:"code"` Description string `json:"description"` Permissions []PermissionInfo `json:"permissions"` } // PermissionInfo 权限信息 type PermissionInfo struct { ID uint `json:"id"` Name string `json:"name"` Description string `json:"description"` Resource string `json:"resource"` Action string `json:"action"` } // RefreshTokenRequest 刷新令牌请求 type RefreshTokenRequest struct { RefreshToken string `json:"refresh_token" binding:"required"` } // LogoutRequest 登出请求 type LogoutRequest struct { Token string `json:"token" binding:"required"` } // CaptchaResponse 验证码响应 type CaptchaResponse struct { CaptchaID string `json:"captcha_id"` CaptchaImage string `json:"captcha_image"` // Base64编码的图片 ExpiresIn int64 `json:"expires_in"` } // PasswordStatus 密码状态 type PasswordStatus struct { ForceChangePassword bool `json:"force_change_password"` PasswordExpired bool `json:"password_expired"` PasswordChangedAt *time.Time `json:"password_changed_at,omitempty"` }