Add tradeOffer image field, tweak image generation to only fire once per tradeOffer, even with simultaneous requests
This commit is contained in:
parent
138a929da6
commit
2d826734a0
9 changed files with 127 additions and 80 deletions
|
|
@ -6,6 +6,21 @@ from cards.models import Card
|
|||
from accounts.models import FriendCode
|
||||
from datetime import timedelta
|
||||
from django.utils import timezone
|
||||
import uuid
|
||||
|
||||
def generate_tradeoffer_hash():
|
||||
"""
|
||||
Generates a unique 9-character hash for a TradeOffer.
|
||||
The last character 'z' indicates its type.
|
||||
"""
|
||||
return hashlib.md5(uuid.uuid4().hex.encode("utf-8")).hexdigest()[:8] + "z"
|
||||
|
||||
def generate_tradeacceptance_hash():
|
||||
"""
|
||||
Generates a unique 9-character hash for a TradeAcceptance.
|
||||
The last character 'y' indicates its type.
|
||||
"""
|
||||
return hashlib.md5(uuid.uuid4().hex.encode("utf-8")).hexdigest()[:8] + "y"
|
||||
|
||||
class TradeOfferManager(models.Manager):
|
||||
|
||||
|
|
@ -32,7 +47,7 @@ class TradeOfferAllManager(models.Manager):
|
|||
|
||||
class TradeOffer(models.Model):
|
||||
objects = TradeOfferManager()
|
||||
all_offers = TradeOfferAllManager() # New unfiltered manager
|
||||
all_offers = TradeOfferAllManager()
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
is_closed = models.BooleanField(default=False, db_index=True)
|
||||
|
|
@ -44,6 +59,7 @@ class TradeOffer(models.Model):
|
|||
)
|
||||
rarity_icon = models.CharField(max_length=8, null=True)
|
||||
rarity_level = models.IntegerField(null=True)
|
||||
image = models.ImageField(upload_to='trade_offers/', null=True, blank=True)
|
||||
want_cards = models.ManyToManyField(
|
||||
"cards.Card",
|
||||
related_name='trade_offers_want',
|
||||
|
|
@ -63,11 +79,9 @@ class TradeOffer(models.Model):
|
|||
return f"Want: {want_names} -> Have: {have_names}"
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
is_new = self.pk is None
|
||||
if not self.hash:
|
||||
self.hash = generate_tradeoffer_hash()
|
||||
super().save(*args, **kwargs)
|
||||
if is_new and not self.hash:
|
||||
self.hash = hashlib.md5((str(self.id) + "z").encode("utf-8")).hexdigest()[:8] + "z"
|
||||
super().save(update_fields=["hash"])
|
||||
|
||||
def update_rarity_fields(self):
|
||||
"""
|
||||
|
|
@ -324,11 +338,9 @@ class TradeAcceptance(models.Model):
|
|||
self.save(update_fields=["state"])
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
is_new = self.pk is None
|
||||
if not self.hash:
|
||||
self.hash = generate_tradeacceptance_hash()
|
||||
super().save(*args, **kwargs)
|
||||
if is_new and not self.hash:
|
||||
self.hash = hashlib.md5((str(self.id) + "y").encode("utf-8")).hexdigest()[:8] + "y"
|
||||
super().save(update_fields=["hash"])
|
||||
|
||||
def __str__(self):
|
||||
return (f"TradeAcceptance(offer_hash={self.trade_offer.hash}, "
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue