Add invitation code validation and auto-generation for guests
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

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.
This commit is contained in:
2025-03-15 20:34:38 +01:00
parent e41e7d0867
commit 3c196b1e91
4 changed files with 42 additions and 2 deletions

View File

@@ -13,6 +13,14 @@ router = APIRouter()
@router.post("/", response_model=GuestRead, operation_id="create_guest")
def create_guest(guest_in: GuestCreate, db: Session = Depends(get_db)):
if guest_in.invitation_code:
existing_guest = guest_crud.get_by_invitation_code(db, guest_in.invitation_code)
if existing_guest:
raise HTTPException(
status_code=400, detail="Guest with this invitation code already exists"
)
else:
guest_in.invitation_code = str(uuid.uuid4())[:8]
guest = guest_crud.create(db, obj_in=guest_in)
return guest

View File

@@ -11,6 +11,10 @@ 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,

View File

@@ -21,7 +21,7 @@ class GuestBase(BaseModel):
class GuestCreate(GuestBase):
invitation_code: str
invitation_code: Optional[str] = None
class GuestUpdate(BaseModel):
@@ -45,4 +45,5 @@ class GuestRead(GuestBase):
response_date: Optional[datetime] = None
actual_additional_guests: int
is_blocked: bool
model_config = ConfigDict(from_attributes=True)
model_config = ConfigDict(from_attributes=True)
invitation_code: str