from pydantic import BaseModel from typing import Optional from datetime import date, datetime from .models import GenderType, ShoeSystemType, BraSystemType # Schema di base con i campi comuni class CelebrityBase(BaseModel): name: str gender: GenderType birth_date: Optional[date] = None birth_place: Optional[str] = None nationality: Optional[str] = None ethnicity: Optional[str] = None sexuality: Optional[str] = None hair_color: Optional[str] = None eye_color: Optional[str] = None height_cm: Optional[int] = None weight_kg: Optional[int] = None body_type: Optional[str] = None bust_cm: Optional[int] = None waist_cm: Optional[int] = None hips_cm: Optional[int] = None chest_circumference_cm: Optional[int] = None bra_band_size: Optional[int] = None bra_cup_size: Optional[str] = None bra_size_system: Optional[BraSystemType] = None boobs_are_natural: Optional[bool] = None shoe_size: Optional[float] = None shoe_size_system: Optional[ShoeSystemType] = None biography: Optional[str] = None official_website: Optional[str] = None profile_image_id: Optional[int] = None # Schema per la creazione di una nuova celebrità (eredita da Base) class CelebrityCreate(CelebrityBase): pass # Schema per l'aggiornamento (tutti i campi sono opzionali) class CelebrityUpdate(BaseModel): name: Optional[str] = None gender: Optional[GenderType] = None birth_date: Optional[date] = None birth_place: Optional[str] = None nationality: Optional[str] = None ethnicity: Optional[str] = None sexuality: Optional[str] = None hair_color: Optional[str] = None eye_color: Optional[str] = None height_cm: Optional[int] = None weight_kg: Optional[int] = None body_type: Optional[str] = None bust_cm: Optional[int] = None waist_cm: Optional[int] = None hips_cm: Optional[int] = None chest_circumference_cm: Optional[int] = None bra_band_size: Optional[int] = None bra_cup_size: Optional[str] = None bra_size_system: Optional[BraSystemType] = None boobs_are_natural: Optional[bool] = None shoe_size: Optional[float] = None shoe_size_system: Optional[ShoeSystemType] = None biography: Optional[str] = None official_website: Optional[str] = None profile_image_id: Optional[int] = None # Schema per la lettura dei dati (include campi generati dal DB) class Celebrity(CelebrityBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True # Permette a Pydantic di leggere dati da un modello ORM