from django.db import models class DeckNameTranslation(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64) deck = models.ForeignKey("Deck", 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 CardNameTranslation(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64) card = models.ForeignKey("Card", 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') 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) 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 @property def normalized_id(self): """ For trading equivalence: treat Special Art Rare (pk 7) and Super Rare (pk 6) as the same. """ if self.pk in (6, 7): return 6 return self.pk class Card(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64) decks = models.ManyToManyField("Deck") cardset = models.ForeignKey("CardSet", on_delete=models.PROTECT, related_name='cards') cardnum = models.IntegerField() rarity = models.ForeignKey(Rarity, on_delete=models.PROTECT, related_name='cards') created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) 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