73 lines
2.4 KiB
Go
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
|
||
|
|
}
|