Files
eventspace/backend/app/crud/guest.py
Felipe Cardoso 3c196b1e91
All checks were successful
Build and Push Docker Images / changes (push) Successful in 4s
Build and Push Docker Images / build-backend (push) Successful in 50s
Build and Push Docker Images / build-frontend (push) Has been skipped
Add invitation code validation and auto-generation for guests
Validate uniqueness of invitation codes during guest creation to prevent duplicates. Automatically generate an 8-character code if none is provided, ensuring consistent data handling. Updated tests and schemas to support these changes.
2025-03-15 20:34:38 +01:00

50 lines
1.7 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):
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)