71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
package dto
|
|
|
|
import (
|
|
"time"
|
|
|
|
"starter-kit/internal/domain/role"
|
|
"starter-kit/internal/domain/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{}
|
|
}
|
|
}
|