from uuid import UUID from typing import Optional, Any from pydantic import BaseModel, Field, ConfigDict from datetime import datetime from enum import Enum class RSVPStatus(str, Enum): ATTENDING = "attending" NOT_ATTENDING = "not_attending" MAYBE = "maybe" class RSVPSchemaBase(BaseModel): event_id: UUID guest_id: UUID status: RSVPStatus = Field(...) number_of_guests: int = Field(default=1, ge=1) response_message: str | None = None dietary_requirements: str | None = None additional_info: Any = None class RSVPSchemaCreate(RSVPSchemaBase): event_id: UUID guest_id: UUID number_of_guests: int = Field(default=1, ge=1) class RSVPSchemaUpdate(BaseModel): status: RSVPStatus | None = None number_of_guests: int | None = Field(default=None, ge=1) response_message: str | None = None dietary_requirements: str | None = None additional_info: dict[str, Any] | None = None model_config = ConfigDict(from_attributes=True) class RSVPSchemaInDBBase(RSVPSchemaBase): id: UUID response_message: str | None = None dietary_requirements: str | None = None additional_info: dict[str, Any] | None = None response_date: datetime created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True) class RSVPSchema(RSVPSchemaBase): id: UUID response_date: datetime created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True, arbitrary_types_allowed=True) class RSVPSchemaInDB(RSVPSchemaBase): id: str created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True)