You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

63 lines
2.1 KiB

from pydantic import BaseModel, Field, validator
from typing import List, Optional
from datetime import datetime
from enum import Enum
class StatoPrenotazione(str, Enum):
attiva = "attiva"
servita = "servita"
pagata = "pagata"
annullata = "annullata"
completata = "completata"
class PrenotazioneBase(BaseModel):
pasto_id: int
pietanze_selezionate: List[int] = Field(
description="Lista ID delle pietanze selezionate"
)
note: Optional[str] = Field(None, max_length=500)
stato: StatoPrenotazione = StatoPrenotazione.attiva
@validator('pietanze_selezionate')
def validate_pietanze_selezionate(cls, v):
if not v or len(v) == 0:
raise ValueError("Almeno una pietanza deve essere selezionata")
# Check for duplicates
if len(v) != len(set(v)):
raise ValueError("Non sono ammesse pietanze duplicate")
# Validate each ID
for pietanza_id in v:
if not isinstance(pietanza_id, int) or pietanza_id <= 0:
raise ValueError(f"ID pietanza non valido: {pietanza_id}")
return v
class PrenotazioneCreate(PrenotazioneBase):
# user_id will be extracted from JWT token
pass
class PrenotazioneUpdate(BaseModel):
pietanze_selezionate: Optional[List[int]] = None
note: Optional[str] = Field(None, max_length=500)
stato: Optional[StatoPrenotazione] = None
@validator('pietanze_selezionate')
def validate_pietanze_selezionate(cls, v):
if v is None:
return v
if len(v) == 0:
raise ValueError("Almeno una pietanza deve essere selezionata")
if len(v) != len(set(v)):
raise ValueError("Non sono ammesse pietanze duplicate")
for pietanza_id in v:
if not isinstance(pietanza_id, int) or pietanza_id <= 0:
raise ValueError(f"ID pietanza non valido: {pietanza_id}")
return v
class PrenotazioneResponse(PrenotazioneBase):
id: int
user_id: str
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True