This commit is contained in:
2024-07-10 01:44:33 +02:00
parent ec75ce1ccb
commit 5ebcb665c2
21 changed files with 183 additions and 1328 deletions

View File

@ -3,10 +3,7 @@ from typing import Literal
import auto_prefetch
from django.db import models
from django.db.models import Value
from django.db.models.functions import (
Concat,
)
from simple_history.models import HistoricalRecords
from django.db.models.functions import Concat
class Organization(auto_prefetch.Model):
@ -35,6 +32,11 @@ class Game(auto_prefetch.Model):
For example, MultiVersus.
"""
organization = auto_prefetch.ForeignKey(
Organization,
on_delete=models.CASCADE,
related_name="games",
)
id = models.TextField(primary_key=True)
slug = models.TextField(blank=True, null=True)
twitch_url = models.GeneratedField( # type: ignore # noqa: PGH003
@ -54,7 +56,6 @@ class Game(auto_prefetch.Model):
display_name = models.TextField(blank=True, null=True)
added_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
modified_at = models.DateTimeField(blank=True, null=True, auto_now=True)
history = HistoricalRecords()
class Meta(auto_prefetch.Model.Meta):
verbose_name: str = "Game"
@ -65,55 +66,29 @@ class Game(auto_prefetch.Model):
return self.display_name or self.slug or self.id
class DropBenefit(auto_prefetch.Model):
"""Information about the drop."""
class Drop(auto_prefetch.Model):
"""The actual drop that is being given out."""
id = models.TextField(primary_key=True)
created_at = models.DateTimeField(blank=True, null=True)
entitlement_limit = models.IntegerField(blank=True, null=True)
image_asset_url = models.URLField(blank=True, null=True)
is_ios_available = models.BooleanField(blank=True, null=True)
name = models.TextField(blank=True, null=True)
owner_organization = auto_prefetch.ForeignKey(
Organization,
on_delete=models.CASCADE,
related_name="drop_benefits",
)
game = auto_prefetch.ForeignKey(Game, on_delete=models.CASCADE, related_name="drop_benefits")
added_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
modified_at = models.DateTimeField(blank=True, null=True, auto_now=True)
history = HistoricalRecords()
class Meta(auto_prefetch.Model.Meta):
verbose_name: str = "Drop Benefit"
verbose_name_plural: str = "Drop Benefits"
ordering: tuple[Literal["name"]] = ("name",)
def __str__(self) -> str:
return f"{self.owner_organization.name} - {self.game.display_name} - {self.name}"
class TimeBasedDrop(auto_prefetch.Model):
"""The actual drop that is being given out."""
id = models.TextField(primary_key=True)
required_subs = models.IntegerField(blank=True, null=True)
end_at = models.DateTimeField(blank=True, null=True)
name = models.TextField(blank=True, null=True)
required_minutes_watched = models.IntegerField(blank=True, null=True)
start_at = models.DateTimeField(blank=True, null=True)
benefits = models.ManyToManyField(DropBenefit, related_name="time_based_drops")
added_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
modified_at = models.DateTimeField(blank=True, null=True, auto_now=True)
history = HistoricalRecords()
drop_campaign = auto_prefetch.ForeignKey("DropCampaign", on_delete=models.CASCADE, related_name="drops")
class Meta(auto_prefetch.Model.Meta):
verbose_name: str = "Time-Based Drop"
verbose_name_plural: str = "Time-Based Drops"
verbose_name: str = "Drop"
verbose_name_plural: str = "Drops"
ordering: tuple[Literal["name"]] = ("name",)
def __str__(self) -> str:
return f"{self.benefits.first()} - {self.name}"
return f"{self.name}"
class DropCampaign(auto_prefetch.Model):
@ -136,15 +111,8 @@ class DropCampaign(auto_prefetch.Model):
on_delete=models.CASCADE,
related_name="drop_campaigns",
)
owner = auto_prefetch.ForeignKey(
Organization,
on_delete=models.CASCADE,
related_name="drop_campaigns",
)
time_based_drops = models.ManyToManyField(TimeBasedDrop, related_name="drop_campaigns")
added_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
modified_at = models.DateTimeField(blank=True, null=True, auto_now=True)
history = HistoricalRecords()
class Meta(auto_prefetch.Model.Meta):
verbose_name: str = "Drop Campaign"
@ -152,4 +120,4 @@ class DropCampaign(auto_prefetch.Model):
ordering: tuple[Literal["name"]] = ("name",)
def __str__(self) -> str:
return f"{self.owner.name} - {self.game.display_name} - {self.name}"
return f"{self.game.display_name} - {self.name}"