70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package dto
|
|
|
|
import (
|
|
"time"
|
|
|
|
"starter-kit/internal/domain/role"
|
|
)
|
|
|
|
// 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(user interface{}) UserResponse {
|
|
switch u := user.(type) {
|
|
case struct {
|
|
ID string
|
|
Username string
|
|
Email string
|
|
FullName string
|
|
AvatarURL string
|
|
IsActive bool
|
|
Roles []role.Role
|
|
CreatedAt time.Time
|
|
}:
|
|
return UserResponse{
|
|
ID: u.ID,
|
|
Username: u.Username,
|
|
Email: u.Email,
|
|
FullName: u.FullName,
|
|
AvatarURL: u.AvatarURL,
|
|
IsActive: u.IsActive,
|
|
Roles: u.Roles,
|
|
CreatedAt: u.CreatedAt,
|
|
}
|
|
default:
|
|
return UserResponse{}
|
|
}
|
|
}
|