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=8" 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 PasswordChangeRequest struct { OldPassword string `json:"old_password" binding:"required" example:"Secret123!"` NewPassword string `json:"new_password" binding:"required,min=8" example:"NewSecret456!"` } type UpdateProfileRequest struct { Username string `json:"username" binding:"required,min=3,max=30" example:"john_updated"` } type ErrorResponse struct { Error string `json:"error" example:"invalid email or password"` }