recognition: Recognition model w. grant_if_new; sky_save returns stargazer on first chart save — TDD

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-04-22 02:13:29 -04:00
parent 83ce238a2f
commit be061f6bc2
5 changed files with 205 additions and 3 deletions

View File

@@ -168,3 +168,28 @@ class ScrollPosition(models.Model):
def record(room, verb, actor=None, **data):
"""Record a game event in the drama log."""
return GameEvent.objects.create(room=room, actor=actor, verb=verb, data=data)
class Recognition(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
related_name="recognitions",
)
slug = models.SlugField(max_length=60)
earned_at = models.DateTimeField()
palette = models.CharField(max_length=60, null=True, blank=True)
class Meta:
unique_together = [("user", "slug")]
ordering = ["earned_at"]
def __str__(self):
return f"{self.user.email}{self.slug}"
@classmethod
def grant_if_new(cls, user, slug):
from django.utils import timezone
return cls.objects.get_or_create(
user=user, slug=slug,
defaults={"earned_at": timezone.now()},
)