from django.contrib.auth import get_user_model from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.models.deletion import CASCADE, DO_NOTHING from django.utils import timezone from django_extensions.db.models import TimeStampedModel from games.models import Game User = get_user_model() class UserGameProgress(TimeStampedModel): user = models.ForeignKey(User, on_delete=models.CASCADE) game = models.ForeignKey(Game, on_delete=DO_NOTHING) started_ts = models.DateTimeField(default=timezone.now, blank=True) finished_ts = models.DateTimeField(blank=True, null=True) percent = models.IntegerField( default=0, validators=[MaxValueValidator(100), MinValueValidator(0)], help_text="Keeps track of how far through the game you are", ) def __str__(self): return f"Progress in {self.game} for {self.user} ({self.percent}%)" class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=CASCADE, related_name="profile") favorite_games = models.ManyToManyField(Game, related_name="favorite_games") def __str__(self): return f"User profile for {self.user}"