Add guests API with CRUD operations and tests
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.
This commit is contained in:
48
backend/app/schemas/guests.py
Normal file
48
backend/app/schemas/guests.py
Normal file
@@ -0,0 +1,48 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user