91 lines
1.8 KiB
Python
91 lines
1.8 KiB
Python
from pydantic import BaseModel, Field
|
|
from datetime import datetime, date
|
|
from typing import Optional
|
|
|
|
|
|
# === Services ===
|
|
class ServiceOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
slug: str
|
|
duration_min: int
|
|
description: Optional[str] = None
|
|
category: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ServiceCreate(BaseModel):
|
|
name: str
|
|
slug: str
|
|
duration_min: int = 15
|
|
description: Optional[str] = None
|
|
category: str = "generale"
|
|
|
|
|
|
# === Providers ===
|
|
class ProviderOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProviderCreate(BaseModel):
|
|
name: str
|
|
email: Optional[str] = None
|
|
phone: Optional[str] = None
|
|
google_calendar_id: Optional[str] = None
|
|
|
|
|
|
# === Availability ===
|
|
class TimeSlot(BaseModel):
|
|
start: str # "09:00"
|
|
end: str # "09:30"
|
|
provider_id: int
|
|
provider_name: str
|
|
|
|
|
|
class AvailabilityRule(BaseModel):
|
|
weekday: int # 0=lun, 6=dom
|
|
start: str # "09:00"
|
|
end: str # "13:00"
|
|
|
|
|
|
# === Bookings ===
|
|
class BookingCreate(BaseModel):
|
|
service_id: int
|
|
provider_id: int
|
|
start_at: datetime
|
|
customer_name: str
|
|
customer_phone: str
|
|
customer_email: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
|
|
|
|
class BookingOut(BaseModel):
|
|
id: int
|
|
service_id: int
|
|
provider_id: int
|
|
customer_name: str
|
|
customer_phone: str
|
|
customer_email: Optional[str] = None
|
|
start_at: datetime
|
|
end_at: datetime
|
|
status: str
|
|
notes: Optional[str] = None
|
|
created_at: datetime
|
|
|
|
service: Optional[ServiceOut] = None
|
|
provider: Optional[ProviderOut] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class BookingUpdate(BaseModel):
|
|
status: Optional[str] = None
|
|
notes: Optional[str] = None
|