Achievements ~ Data Model - uchicago-cs/chigame GitHub Wiki
A User has played Games:
class User(AbstractUser): *from users/models.py
- name = models.CharField(_("Name of User"), blank=True, max_length=255)
- first_name = None # type: ignore
- last_name = None # type: ignore
- email = models.EmailField(_("email address"), unique=True)
- etc.
class Game(models.Model): *from games/models.py
- name = models.TextField()
- description = models.TextField()
- year_published = models.IntegerField(null=True, blank=True)
- users = models.ManyToManyField(User, related_name="games", blank=True)
- etc.
A Game has Achievements:
class Achievement(models.Model):
- class Rarity(models.IntegerChoices):
- COMMON = 1, ‘Common’
- UNCOMMON = 2, ‘Uncommon’
- RARE = 3, ‘Rare’
- PRECIOUS = 4, ‘Precious’
- name = models.TextField()
- description = models.TextField(null=True, blank=True)
- spoiler = models.BooleanField()
- rarity = models.IntegerField(choices=Rarity.choices)
- game = models.ForeignKey(Game, on_delete = models.CASCADE)
- threshold = models.FloatField(null=True, blank=True, default=1)
A User has Achievements:
class UserAchievement(models.Model):
-
user = models.ForeignKey(User, on_delete = models.CASCADE)
-
achievement = models.ForeignKey(Achievement, on_delete = models.CASCADE)
-
pinned = models.BooleanField()
-
date_earned = models.DateTimeField()
-
last_updated = models.DateTimeField(null=True, blank=True)
-
progress = models.FloatField(null=True, blank=True, default=1)
-
class Meta:
- unique_together = (user, achievement)