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): if obj_in.invitation_code is None: obj_in.invitation_code = str(uuid.uuid4())[:8] 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)