Refactor database models to majorly increase queries needed and decrease load times of home from 30 secs to 5 sec (we will be caching the rest to decrease even further via background tasks)
This commit is contained in:
parent
f7a9b2f823
commit
86c7eba10a
25 changed files with 1941 additions and 1560 deletions
|
|
@ -23,91 +23,29 @@ class CardNameTranslation(models.Model):
|
|||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class RarityNameTranslation(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=64)
|
||||
rarity = models.ForeignKey("Rarity", on_delete=models.PROTECT, related_name='name_translations')
|
||||
language = models.CharField(max_length=64)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class CardSet(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=64)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Deck(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=64)
|
||||
hex_color = models.CharField(max_length=9)
|
||||
cardset = models.ForeignKey("CardSet", on_delete=models.PROTECT, related_name='decks')
|
||||
cardset = models.CharField(max_length=8)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Rarity(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
normalized_id = models.IntegerField(null=False)
|
||||
name = models.CharField(max_length=64)
|
||||
icons = models.CharField(max_length=64)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
# Custom Manager for Card model
|
||||
class CardPrefetchManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return (
|
||||
super()
|
||||
.get_queryset()
|
||||
.select_related("cardset", "rarity")
|
||||
.prefetch_related(
|
||||
"decks",
|
||||
"decks__cardset",
|
||||
)
|
||||
)
|
||||
|
||||
class CardManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return (
|
||||
super()
|
||||
.get_queryset()
|
||||
.select_related("cardset", "rarity")
|
||||
)
|
||||
|
||||
class Card(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.CharField(max_length=64)
|
||||
name = models.CharField(max_length=128)
|
||||
decks = models.ManyToManyField("Deck")
|
||||
cardset = models.ForeignKey("CardSet", on_delete=models.PROTECT, related_name='cards')
|
||||
cardset = models.CharField(max_length=8)
|
||||
cardnum = models.IntegerField()
|
||||
rarity = models.ForeignKey(Rarity, on_delete=models.PROTECT, related_name='cards')
|
||||
style = models.CharField(max_length=255, null=False)
|
||||
rarity_icon = models.CharField(max_length=8)
|
||||
rarity_level = models.IntegerField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
# Use the custom manager to ensure optimized querysets everywhere.
|
||||
objects = CardPrefetchManager()
|
||||
objects_no_prefetch = CardManager()
|
||||
|
||||
def __str__(self):
|
||||
# For display, we show the original rarity icons.
|
||||
return f"{self.name} {self.rarity.icons} {self.cardset.name}"
|
||||
|
||||
@property
|
||||
def normalized_rarity(self):
|
||||
"""
|
||||
Returns the canonical rarity id for trade logic.
|
||||
"""
|
||||
return self.rarity.normalized_id
|
||||
return f"{self.name} {self.rarity_icon} {self.cardset}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue