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:
46
backend/app/crud/guest.py
Normal file
46
backend/app/crud/guest.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from app.crud.base import CRUDBase
|
||||
from app.models.guest import Guest
|
||||
from app.schemas.guests import GuestCreate, GuestUpdate
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import Optional
|
||||
from app.models.guest import GuestStatus
|
||||
from datetime import datetime, timezone
|
||||
import uuid
|
||||
|
||||
|
||||
class CRUDGuest(CRUDBase[Guest, GuestCreate, GuestUpdate]):
|
||||
|
||||
def create(self, db, obj_in: GuestCreate):
|
||||
db_guest = Guest(
|
||||
event_id=uuid.UUID(obj_in.event_id) if isinstance(obj_in.event_id, str) else obj_in.event_id, # explicit casting
|
||||
invited_by=uuid.UUID(obj_in.invited_by) if isinstance(obj_in.invited_by, str) else obj_in.invited_by,
|
||||
full_name=obj_in.full_name,
|
||||
email=obj_in.email,
|
||||
invitation_code=obj_in.invitation_code
|
||||
)
|
||||
db.add(db_guest)
|
||||
db.commit()
|
||||
db.refresh(db_guest)
|
||||
return db_guest
|
||||
|
||||
|
||||
def get_by_invitation_code(self, db: Session, invitation_code: str) -> Optional[Guest]:
|
||||
return db.query(Guest).filter(Guest.invitation_code == invitation_code).first()
|
||||
|
||||
def update_status(self, db: Session, guest_id: uuid.UUID, status: GuestStatus):
|
||||
guest = self.get(db, guest_id)
|
||||
if guest:
|
||||
guest.status = status
|
||||
guest.response_date = datetime.now(timezone.utc)
|
||||
db.commit()
|
||||
db.refresh(guest)
|
||||
return guest
|
||||
|
||||
def remove(self, db: Session, *, guest_id: str) -> Guest:
|
||||
guest_id = uuid.UUID(guest_id) if isinstance(guest_id, str) else guest_id
|
||||
obj = db.query(self.model).get(guest_id)
|
||||
db.delete(obj)
|
||||
db.commit()
|
||||
return obj
|
||||
|
||||
guest_crud = CRUDGuest(Guest)
|
||||
Reference in New Issue
Block a user