ulflow_phattt2901 f4ef71b63b
Some checks failed
CI Pipeline / Security Scan (push) Failing after 5m24s
CI Pipeline / Lint (push) Failing after 5m30s
CI Pipeline / Test (push) Has been skipped
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Notification (push) Successful in 1s
feat: implement user authentication system with JWT and role-based access control
2025-05-24 11:24:19 +07:00

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{}
}
}