package dto import "strings" // RegisterRequest 用户注册请求 type RegisterRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required,min=6"` Role string `json:"role,omitempty"` WorkspaceID string `json:"workspaceId,omitempty"` WorkspaceIDSnake string `json:"workspace_id,omitempty"` Namespace string `json:"namespace,omitempty"` DefaultClusterID string `json:"defaultClusterId,omitempty"` DefaultClusterIDSnake string `json:"default_cluster_id,omitempty"` QuotaCPU string `json:"quotaCpu,omitempty"` QuotaCPUSnake string `json:"quota_cpu,omitempty"` QuotaMemory string `json:"quotaMemory,omitempty"` QuotaMemorySnake string `json:"quota_memory,omitempty"` QuotaGPU string `json:"quotaGpu,omitempty"` QuotaGPUSnake string `json:"quota_gpu,omitempty"` QuotaGPUMem string `json:"quotaGpuMemory,omitempty"` QuotaGPUMemSnake string `json:"quota_gpu_memory,omitempty"` IsActive *bool `json:"isActive,omitempty"` IsActiveSnake *bool `json:"is_active,omitempty"` MustChangePassword *bool `json:"mustChangePassword,omitempty"` MustChangePasswordSnake *bool `json:"must_change_password,omitempty"` } func (r *RegisterRequest) Normalize() { if r == nil { return } r.WorkspaceID = firstNonBlank(r.WorkspaceID, r.WorkspaceIDSnake) r.DefaultClusterID = firstNonBlank(r.DefaultClusterID, r.DefaultClusterIDSnake) r.QuotaCPU = firstNonBlank(r.QuotaCPU, r.QuotaCPUSnake) r.QuotaMemory = firstNonBlank(r.QuotaMemory, r.QuotaMemorySnake) r.QuotaGPU = firstNonBlank(r.QuotaGPU, r.QuotaGPUSnake) r.QuotaGPUMem = firstNonBlank(r.QuotaGPUMem, r.QuotaGPUMemSnake) if r.IsActive == nil { r.IsActive = r.IsActiveSnake } if r.MustChangePassword == nil { r.MustChangePassword = r.MustChangePasswordSnake } } // LoginRequest 用户登录请求 type LoginRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } // RefreshTokenRequest 刷新 Token 请求 type RefreshTokenRequest struct { RefreshToken string `json:"refreshToken" binding:"required"` } // AuthResponse 认证响应 type AuthResponse struct { AccessToken string `json:"accessToken"` RefreshToken string `json:"refreshToken"` UserID string `json:"userId"` Username string `json:"username"` Role string `json:"role"` WorkspaceID string `json:"workspaceId"` WorkspaceName string `json:"workspaceName,omitempty"` Namespace string `json:"namespace,omitempty"` DefaultClusterID string `json:"defaultClusterId,omitempty"` QuotaCPU string `json:"quotaCpu,omitempty"` QuotaMemory string `json:"quotaMemory,omitempty"` QuotaGPU string `json:"quotaGpu,omitempty"` QuotaGPUMem string `json:"quotaGpuMemory,omitempty"` Permissions []string `json:"permissions,omitempty"` PermissionVersion int `json:"permissionVersion"` } // UserResponse 用户信息响应 type UserResponse struct { ID string `json:"id"` Username string `json:"username"` Email string `json:"email"` Role string `json:"role"` WorkspaceID string `json:"workspaceId"` WorkspaceName string `json:"workspaceName,omitempty"` Namespace string `json:"namespace,omitempty"` DefaultClusterID string `json:"defaultClusterId,omitempty"` QuotaCPU string `json:"quotaCpu,omitempty"` QuotaMemory string `json:"quotaMemory,omitempty"` QuotaGPU string `json:"quotaGpu,omitempty"` QuotaGPUMem string `json:"quotaGpuMemory,omitempty"` IsActive bool `json:"isActive"` MustChangePassword bool `json:"mustChangePassword"` CreatedAt string `json:"createdAt"` UpdatedAt string `json:"updatedAt"` } // UpdateUserRequest 管理员更新用户状态/角色请求 type UpdateUserRequest struct { Role string `json:"role,omitempty"` WorkspaceID string `json:"workspaceId,omitempty"` WorkspaceIDSnake string `json:"workspace_id,omitempty"` Namespace string `json:"namespace,omitempty"` DefaultClusterID string `json:"defaultClusterId,omitempty"` DefaultClusterIDSnake string `json:"default_cluster_id,omitempty"` QuotaCPU string `json:"quotaCpu,omitempty"` QuotaCPUSnake string `json:"quota_cpu,omitempty"` QuotaMemory string `json:"quotaMemory,omitempty"` QuotaMemorySnake string `json:"quota_memory,omitempty"` QuotaGPU string `json:"quotaGpu,omitempty"` QuotaGPUSnake string `json:"quota_gpu,omitempty"` QuotaGPUMem string `json:"quotaGpuMemory,omitempty"` QuotaGPUMemSnake string `json:"quota_gpu_memory,omitempty"` IsActive *bool `json:"isActive,omitempty"` IsActiveSnake *bool `json:"is_active,omitempty"` MustChangePassword *bool `json:"mustChangePassword,omitempty"` MustChangePasswordSnake *bool `json:"must_change_password,omitempty"` } func (r *UpdateUserRequest) Normalize() { if r == nil { return } r.WorkspaceID = firstNonBlank(r.WorkspaceID, r.WorkspaceIDSnake) r.DefaultClusterID = firstNonBlank(r.DefaultClusterID, r.DefaultClusterIDSnake) r.QuotaCPU = firstNonBlank(r.QuotaCPU, r.QuotaCPUSnake) r.QuotaMemory = firstNonBlank(r.QuotaMemory, r.QuotaMemorySnake) r.QuotaGPU = firstNonBlank(r.QuotaGPU, r.QuotaGPUSnake) r.QuotaGPUMem = firstNonBlank(r.QuotaGPUMem, r.QuotaGPUMemSnake) if r.IsActive == nil { r.IsActive = r.IsActiveSnake } if r.MustChangePassword == nil { r.MustChangePassword = r.MustChangePasswordSnake } } func firstNonBlank(primary, alternate string) string { if strings.TrimSpace(primary) != "" { return primary } return alternate }