Introduce a new API for managing event guests, including endpoints for creating, reading, updating, deleting, and changing guest status. Added corresponding Pydantic schemas, database CRUD logic, and extensive test coverage to validate functionality. Integrated the guests API under the events router.
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
import uuid
|
|
|
|
from pydantic import BaseModel, EmailStr, ConfigDict
|
|
from datetime import datetime
|
|
from typing import Optional, Any, Dict
|
|
from app.models.guest import GuestStatus
|
|
from uuid import UUID
|
|
|
|
class GuestBase(BaseModel):
|
|
event_id: UUID
|
|
invited_by: UUID
|
|
user_id: Optional[UUID] = None
|
|
full_name: str
|
|
email: Optional[EmailStr] = None
|
|
phone: Optional[str] = None
|
|
max_additional_guests: Optional[int] = 0
|
|
dietary_restrictions: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
custom_fields: Optional[Dict[str, Any]] = None
|
|
can_bring_guests: Optional[bool] = False
|
|
|
|
|
|
class GuestCreate(GuestBase):
|
|
invitation_code: str
|
|
|
|
|
|
class GuestUpdate(BaseModel):
|
|
full_name: Optional[str] = None
|
|
email: Optional[EmailStr] = None
|
|
phone: Optional[str] = None
|
|
status: Optional[GuestStatus] = None
|
|
max_additional_guests: Optional[int] = None
|
|
actual_additional_guests: Optional[int] = None
|
|
dietary_restrictions: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
custom_fields: Optional[Dict[str, Any]] = None
|
|
is_blocked: Optional[bool] = None
|
|
can_bring_guests: Optional[bool] = None
|
|
|
|
|
|
class GuestRead(GuestBase):
|
|
id: UUID
|
|
status: GuestStatus
|
|
invitation_sent_at: Optional[datetime] = None
|
|
response_date: Optional[datetime] = None
|
|
actual_additional_guests: int
|
|
is_blocked: bool
|
|
model_config = ConfigDict(from_attributes=True) |