51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
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, number_of_guests: int = 0):
|
|
guest = self.get(db, guest_id)
|
|
if guest:
|
|
guest.status = status
|
|
guest.actual_additional_guests = number_of_guests
|
|
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) |