Files
2026-07-30 09:51:25 +07:00

73 lines
2.4 KiB
Go

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
}