Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| from typing import Optional | |
| from pydantic import BaseModel, EmailStr, Field, field_validator | |
| from app.models.user import SoftwareLevel, HardwareLevel | |
| class SignupRequest(BaseModel): | |
| """Request schema for user registration""" | |
| email: EmailStr | |
| password: str = Field(..., min_length=8, description="Password must be at least 8 characters") | |
| software_level: SoftwareLevel | |
| hardware_level: HardwareLevel | |
| learning_goals: str = Field(..., max_length=1000, description="Learning objectives (max 1000 chars)") | |
| def normalize_email(cls, v: str) -> str: | |
| """Normalize email to lowercase""" | |
| return v.lower().strip() | |
| class SigninRequest(BaseModel): | |
| """Request schema for user authentication""" | |
| email: EmailStr | |
| password: str | |
| def normalize_email(cls, v: str) -> str: | |
| """Normalize email to lowercase""" | |
| return v.lower().strip() | |
| class TokenResponse(BaseModel): | |
| """Response schema for successful authentication""" | |
| access_token: str | |
| token_type: str = "bearer" | |
| class UserResponse(BaseModel): | |
| """Response schema for user profile data""" | |
| id: int | |
| email: str | |
| username: Optional[str] = None | |
| software_level: str | |
| hardware_level: str | |
| learning_goals: str | |
| created_at: datetime | |
| class Config: | |
| from_attributes = True | |