generated from bisco/codex-bootstrap
feat: add reservation QR retrieval
This commit is contained in:
@@ -40,6 +40,10 @@ class AlreadyConfirmedReservation(BookingServiceError):
|
||||
pass
|
||||
|
||||
|
||||
class ReservationNotConfirmed(BookingServiceError):
|
||||
pass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class PendingReservationResult:
|
||||
reservation: Reservation
|
||||
@@ -59,6 +63,13 @@ class ConfirmedReservationResult:
|
||||
qr_code_url: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ReservationQRResult:
|
||||
reservation: Reservation
|
||||
qr_code_image: str
|
||||
qr_code_url: str
|
||||
|
||||
|
||||
def calculate_available_seats(performance):
|
||||
confirmed_seats = (
|
||||
Reservation.objects.filter(
|
||||
@@ -184,9 +195,32 @@ def confirm_reservation_from_token(raw_token):
|
||||
available_seats=available_seats - reservation.party_size,
|
||||
qr_code_image=generate_check_in_qr_base64(
|
||||
reservation=reservation,
|
||||
raw_check_in_token=raw_check_in_token,
|
||||
raw_check_in_token=raw_token,
|
||||
),
|
||||
qr_code_url=build_check_in_preview_url(raw_check_in_token),
|
||||
qr_code_url=build_check_in_preview_url(raw_token),
|
||||
)
|
||||
|
||||
|
||||
def retrieve_reservation_qr_from_token(raw_token):
|
||||
try:
|
||||
confirmation_token = ReservationToken.objects.select_related("reservation").get(
|
||||
token_hash=ReservationToken.hash_token(raw_token),
|
||||
purpose=ReservationToken.Purpose.CONFIRMATION,
|
||||
)
|
||||
except ReservationToken.DoesNotExist as exc:
|
||||
raise InvalidToken("Confirmation token is invalid.") from exc
|
||||
|
||||
reservation = confirmation_token.reservation
|
||||
if reservation.status != Reservation.Status.CONFIRMED:
|
||||
raise ReservationNotConfirmed("Reservation must be confirmed before QR retrieval.")
|
||||
|
||||
return ReservationQRResult(
|
||||
reservation=reservation,
|
||||
qr_code_image=generate_check_in_qr_base64(
|
||||
reservation=reservation,
|
||||
raw_check_in_token=raw_token,
|
||||
),
|
||||
qr_code_url=build_check_in_preview_url(raw_token),
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user