Remove Edition
Some checks failed
Django CI/CD / test (push) Failing after 54s
Django CI/CD / build-and-push (push) Has been skipped

This commit is contained in:
2025-01-29 22:05:06 +01:00
parent e571feadef
commit 6bd8271291
29 changed files with 286 additions and 467 deletions

View File

@ -29,6 +29,17 @@ class Game(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if self.platform is None:
self.platform = get_sentinel_platform()
super().save(*args, **kwargs)
def get_sentinel_platform():
return Platform.objects.get_or_create(
name="Unspecified", icon="unspecified", group="Unspecified"
)[0]
class Platform(models.Model):
name = models.CharField(max_length=255)
@ -45,35 +56,6 @@ class Platform(models.Model):
super().save(*args, **kwargs)
def get_sentinel_platform():
return Platform.objects.get_or_create(
name="Unspecified", icon="unspecified", group="Unspecified"
)[0]
class Edition(models.Model):
class Meta:
unique_together = [["name", "platform", "year_released"]]
game = models.ForeignKey(Game, on_delete=models.CASCADE, related_name="editions")
name = models.CharField(max_length=255)
sort_name = models.CharField(max_length=255, null=True, blank=True, default=None)
platform = models.ForeignKey(
Platform, on_delete=models.SET_DEFAULT, null=True, blank=True, default=None
)
year_released = models.IntegerField(null=True, blank=True, default=None)
wikidata = models.CharField(max_length=50, null=True, blank=True, default=None)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.sort_name
def save(self, *args, **kwargs):
if self.platform is None:
self.platform = get_sentinel_platform()
super().save(*args, **kwargs)
class PurchaseQueryset(models.QuerySet):
def refunded(self):
return self.filter(date_refunded__isnull=False)
@ -120,7 +102,8 @@ class Purchase(models.Model):
objects = PurchaseQueryset().as_manager()
editions = models.ManyToManyField(Edition, related_name="purchases", blank=True)
games = models.ManyToManyField(Game, related_name="purchases", blank=True)
platform = models.ForeignKey(
Platform, on_delete=models.CASCADE, default=None, null=True, blank=True
)
@ -150,24 +133,26 @@ class Purchase(models.Model):
@property
def standardized_name(self):
return self.name if self.name else self.first_edition.name
return self.name if self.name else self.first_game.name
@property
def first_edition(self):
return self.editions.first()
def first_game(self):
return self.games.first()
def __str__(self):
additional_info = [
self.get_type_display() if self.type != Purchase.GAME else "",
(
f"{self.first_edition.platform} version on {self.platform}"
if self.platform != self.first_edition.platform
f"{self.first_game.platform} version on {self.platform}"
if self.platform != self.first_game.platform
else self.platform
),
self.first_edition.year_released,
self.first_game.year_released,
self.get_ownership_type_display(),
]
return f"{self.first_edition} ({', '.join(filter(None, map(str, additional_info)))})"
return (
f"{self.first_game} ({', '.join(filter(None, map(str, additional_info)))})"
)
def is_game(self):
return self.type == self.GAME
@ -218,7 +203,14 @@ class Session(models.Model):
class Meta:
get_latest_by = "timestamp_start"
purchase = models.ForeignKey(Purchase, on_delete=models.CASCADE)
game = models.ForeignKey(
Game,
on_delete=models.CASCADE,
blank=True,
null=True,
default=None,
related_name="sessions",
)
timestamp_start = models.DateTimeField()
timestamp_end = models.DateTimeField(blank=True, null=True)
duration_manual = models.DurationField(blank=True, null=True, default=timedelta(0))
@ -240,7 +232,7 @@ class Session(models.Model):
def __str__(self):
mark = ", manual" if self.is_manual() else ""
return f"{str(self.purchase)} {str(self.timestamp_start.date())} ({self.duration_formatted()}{mark})"
return f"{str(self.game)} {str(self.timestamp_start.date())} ({self.duration_formatted()}{mark})"
def finish_now(self):
self.timestamp_end = timezone.now()