package user import ( "cardverse/internal/pkg/utils" "time" ) type CreateUserRequest struct { Name string `json:"name" binding:"required,min=2,max=100"` Email string `json:"email" binding:"required,email,max=150"` Password string `json:"password" binding:"required,min=6"` Role string `json:"role" binding:"omitempty,oneof=user admin superadmin"` } type UpdateUserRequest struct { Name string `json:"name" binding:"omitempty,min=2,max=100"` Email string `json:"email" binding:"omitempty,email,max=150"` AvatarURL string `json:"avatar_url" binding:"omitempty,max=500"` Role string `json:"role" binding:"omitempty,oneof=user admin superadmin"` Status string `json:"status" binding:"omitempty,oneof=active suspended unverified"` } type UpdateProfileRequest struct { Name string `json:"name" binding:"omitempty,min=2,max=100"` AvatarURL string `json:"avatar_url" binding:"omitempty,max=500"` } type ListUserQuery struct { Page int `form:"page,default=1" binding:"omitempty,min=1"` Limit int `form:"limit,default=20" binding:"omitempty,min=1,max=100"` Search string `form:"search"` Role string `form:"role" binding:"omitempty"` Status string `form:"status" binding:"omitempty"` } type UserResponse struct { ID uint `json:"id"` Name string `json:"name"` Email string `json:"email"` AvatarURL *string `json:"avatar_url"` Role string `json:"role"` Status string `json:"status"` IsEmailVerified bool `json:"is_email_verified"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` CreatedBy *uint `json:"created_by,omitempty"` UpdatedBy *uint `json:"updated_by,omitempty"` } func ToUserResponse(u User) UserResponse { return UserResponse{ ID: u.ID, Name: u.Name, Email: u.Email, AvatarURL: utils.FormatMediaURLPtr(u.AvatarURL), Role: u.Role, Status: u.Status, IsEmailVerified: u.IsEmailVerified, CreatedAt: u.CreatedAt, UpdatedAt: u.UpdatedAt, CreatedBy: u.CreatedBy, UpdatedBy: u.UpdatedBy, } } func ToUserResponseList(users []User) []UserResponse { result := make([]UserResponse, 0, len(users)) for _, u := range users { result = append(result, ToUserResponse(u)) } return result }