71 lines
2.0 KiB
Go

package dto
import (
"time"
"zee/internal/resource/role"
"zee/internal/resource/user"
)
// RegisterRequest định dạng dữ liệu đăng ký người dùng mới
type RegisterRequest struct {
Username string `json:"username" binding:"required,min=3,max=50"`
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required,min=8"`
FullName string `json:"full_name" binding:"required"`
}
// LoginRequest định dạng dữ liệu đăng nhập
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
// AuthResponse định dạng phản hồi xác thực
type AuthResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresAt time.Time `json:"expires_at"`
TokenType string `json:"token_type"`
}
// UserResponse định dạng phản hồi thông tin người dùng
type UserResponse struct {
ID string `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
FullName string `json:"full_name"`
AvatarURL string `json:"avatar_url,omitempty"`
IsActive bool `json:"is_active"`
Roles []role.Role `json:"roles,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
// ToUserResponse chuyển đổi từ User sang UserResponse
func ToUserResponse(userObj interface{}) UserResponse {
switch u := userObj.(type) {
case *user.User:
// Handle actual domain User model
roles := make([]role.Role, 0)
if u.Roles != nil {
for _, r := range u.Roles {
roles = append(roles, *r)
}
}
return UserResponse{
ID: u.ID,
Username: u.Username,
Email: u.Email,
FullName: u.FullName,
AvatarURL: u.AvatarURL,
IsActive: u.IsActive,
Roles: roles,
CreatedAt: u.CreatedAt,
}
default:
// If we can't handle this type, return an empty response
return UserResponse{}
}
}