new model fields & migrations for apps.epic & apps.lyric; new FTs, ITs & UTs passing

; some styling changes effected primarily to _gatekeetper.html modal
This commit is contained in:
Disco DeDisco
2026-03-14 22:00:16 -04:00
parent 26b6d4e7db
commit 4baaa63430
13 changed files with 410 additions and 28 deletions

View File

@@ -5,8 +5,7 @@ from django.http import HttpResponse
from django.shortcuts import redirect, render
from django.utils import timezone
from apps.epic.models import GateSlot, Room, RoomInvite, debit_token
from apps.lyric.models import Token
from apps.epic.models import GateSlot, Room, RoomInvite, debit_token, select_token
RESERVE_TIMEOUT = timedelta(seconds=60)
@@ -29,12 +28,14 @@ def _gate_context(room, user):
if user.is_authenticated:
user_reserved_slot = slots.filter(gamer=user, status=GateSlot.RESERVED).first()
user_filled_slot = slots.filter(gamer=user, status=GateSlot.FILLED).first()
can_drop = (
eligible = (
user.is_authenticated
and pending_slot is None
and user_reserved_slot is None
and user_filled_slot is None
)
token_depleted = eligible and select_token(user) is None
can_drop = eligible and not token_depleted
is_last_slot = (
user_reserved_slot is not None
and slots.filter(status=GateSlot.EMPTY).count() == 0
@@ -46,6 +47,7 @@ def _gate_context(room, user):
"user_reserved_slot": user_reserved_slot,
"user_filled_slot": user_filled_slot,
"can_drop": can_drop,
"token_depleted": token_depleted,
"is_last_slot": is_last_slot,
"user_can_reject": user_can_reject,
}
@@ -76,6 +78,8 @@ def drop_token(request, room_id):
return redirect("epic:gatekeeper", room_id=room_id)
if room.gate_slots.filter(gamer=request.user, status=GateSlot.FILLED).exists():
return redirect("epic:gatekeeper", room_id=room_id)
if select_token(request.user) is None:
return HttpResponse(status=402)
slot = room.gate_slots.filter(
status=GateSlot.EMPTY
).order_by("slot_number").first()
@@ -95,11 +99,7 @@ def confirm_token(request, room_id):
gamer=request.user, status=GateSlot.RESERVED
).first()
if slot:
token = (
request.user.tokens.filter(token_type=Token.COIN).first()
or request.user.tokens.filter(token_type=Token.FREE).first()
or request.user.tokens.filter(token_type=Token.TITHE).first()
)
token = select_token(request.user)
if token:
debit_token(request.user, slot, token)
return redirect("epic:gatekeeper", room_id=room_id)