71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package auth
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type User struct {
|
|
ID string `json:"id"`
|
|
Username string `json:"username"`
|
|
Email string `json:"email"`
|
|
PasswordHash string `json:"-"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type RegisterRequest struct {
|
|
Username string `json:"username" binding:"required,min=3,max=30" example:"john"`
|
|
Email string `json:"email" binding:"required,email" example:"john@example.com"`
|
|
Password string `json:"password" binding:"required,min=6" example:"secret123"`
|
|
}
|
|
|
|
type LoginRequest struct {
|
|
Email string `json:"email" binding:"required,email" example:"john@example.com"`
|
|
Password string `json:"password" binding:"required" example:"secret123"`
|
|
}
|
|
|
|
type AuthResponse struct {
|
|
Token string `json:"token" example:"eyJhbGciOiJIUzI1NiIs..."`
|
|
RefreshToken string `json:"refresh_token" example:"dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4="`
|
|
User UserPublic `json:"user"`
|
|
}
|
|
|
|
type RefreshRequest struct {
|
|
RefreshToken string `json:"refresh_token" binding:"required" example:"dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4="`
|
|
}
|
|
|
|
type LogoutRequest struct {
|
|
RefreshToken string `json:"refresh_token" binding:"required" example:"dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4="`
|
|
}
|
|
|
|
type RefreshTokenDoc struct {
|
|
ID string `json:"id"`
|
|
UserID string `json:"user_id"`
|
|
TokenHash string `json:"token_hash"`
|
|
ExpiresAt time.Time `json:"expires_at"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type UserPublic struct {
|
|
ID string `json:"id"`
|
|
Username string `json:"username"`
|
|
Email string `json:"email"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
func NewUserPublic(u *User) UserPublic {
|
|
return UserPublic{
|
|
ID: u.ID,
|
|
Username: u.Username,
|
|
Email: u.Email,
|
|
CreatedAt: u.CreatedAt,
|
|
}
|
|
}
|
|
|
|
type UserResponse struct {
|
|
User UserPublic `json:"user"`
|
|
}
|
|
|
|
type ErrorResponse struct {
|
|
Error string `json:"error" example:"invalid email or password"`
|
|
}
|