new migrations in apps.epic & apps.lyric apps; new Token fields of latter articulate upon Room model helper fns of former; new FTs, ITs & UTs capture new behavior accordingly; new template partial content in templates/apps/gameboard

This commit is contained in:
Disco DeDisco
2026-03-13 17:31:52 -04:00
parent 5773462b4c
commit 6a42b91420
12 changed files with 239 additions and 9 deletions

View File

@@ -1,9 +1,13 @@
import uuid
from datetime import timedelta
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
from django.utils import timezone
from apps.lyric.models import Token
class Room(models.Model):
@@ -32,7 +36,7 @@ class Room(models.Model):
)
visibility = models.CharField(max_length=20, choices=VISIBILITY_CHOICES, default=PRIVATE)
gate_status = models.CharField(max_length=20, choices=GATE_STATUS_CHOICES, default=GATHERING)
renewal_period = models.DurationField(null=True, blank=True)
renewal_period = models.DurationField(null=True, blank=True, default=timedelta(days=7))
created_at = models.DateTimeField(auto_now_add=True)
board_state = models.JSONField(default=dict)
seed_count = models.IntegerField(default=12)
@@ -67,3 +71,16 @@ def create_gate_slots(sender, instance, created, **kwargs):
if created:
for i in range(1, 7):
GateSlot.objects.create(room=instance, slot_number=i)
def debit_token(user, slot, token):
if token.token_type == Token.COIN:
token.current_room = slot.room
token.next_ready_at = timezone.now() + slot.room.renewal_period
token.save()
else:
token.delete()
slot.gamer = user
slot.status = GateSlot.FILLED
slot.filled_at = timezone.now()
slot.save()