| """Authentication schemas for request/response validation.""" |
| from pydantic import BaseModel, EmailStr, Field |
| from datetime import datetime |
| from typing import Optional |
|
|
|
|
|
|
| class SignupRequest(BaseModel): |
| email: EmailStr |
| name: str |
| password: str = Field( |
| min_length=8, |
| max_length=72, |
| description="Password must be between 8 and 72 characters" |
| ) |
|
|
|
|
| class SigninRequest(BaseModel): |
| """Request schema for user signin.""" |
| email: EmailStr = Field(..., description="User's email address") |
| password: str = Field(..., description="User's password") |
|
|
|
|
| class UserProfile(BaseModel): |
| """User profile response schema.""" |
| id: int |
| email: str |
| name: str |
| created_at: datetime |
|
|
| class Config: |
| from_attributes = True |
|
|
|
|
| class TokenResponse(BaseModel): |
| """Response schema for authentication with JWT token.""" |
| access_token: str = Field(..., description="JWT access token") |
| token_type: str = Field(default="bearer", description="Token type") |
| expires_in: int = Field(..., description="Token expiration time in seconds") |
| user: UserProfile |
|
|
|
|
| class SignupResponse(BaseModel): |
| """Response schema for successful signup.""" |
| id: int |
| email: str |
| name: str |
| created_at: datetime |
|
|
| class Config: |
| from_attributes = True |
|
|