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:
@@ -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()},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user