diff --git a/apps/wallet/migrations/0007_alter_transaction_created_at_and_more.py b/apps/wallet/migrations/0007_alter_transaction_created_at_and_more.py new file mode 100644 index 0000000..9dee454 --- /dev/null +++ b/apps/wallet/migrations/0007_alter_transaction_created_at_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.7 on 2025-05-27 09:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0006_alter_transaction_uuid'), + ] + + operations = [ + migrations.AlterField( + model_name='transaction', + name='created_at', + field=models.DateTimeField(auto_now_add=True, db_index=True, null=True), + ), + migrations.AlterField( + model_name='transaction', + name='updated_at', + field=models.DateTimeField(auto_now=True, db_index=True, null=True), + ), + ] diff --git a/apps/wallet/models.py b/apps/wallet/models.py index 3dda456..01216c6 100755 --- a/apps/wallet/models.py +++ b/apps/wallet/models.py @@ -57,8 +57,8 @@ class Transaction(models.Model): payee_id = models.UUIDField() payee_type = models.IntegerField(choices=TypeChoices.choices, blank=True, null=True) state = models.IntegerField(choices=StateChoices.choices, default=StateChoices.CREATED) - created_at = models.DateTimeField(auto_now_add=True, null=True) - updated_at = models.DateTimeField(auto_now=True, null=True) + created_at = models.DateTimeField(auto_now_add=True, null=True, db_index=True) + updated_at = models.DateTimeField(auto_now=True, null=True, db_index=True) application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL, on_delete=models.PROTECT, related_name='transactions', null=True) details = models.JSONField(null=True, blank=True, default=dict) @@ -69,7 +69,8 @@ class Transaction(models.Model): # objects = TransactionManager() - # class Meta: + class Meta: + ordering = ['-created_at'] # unique_together = ('application', 'detail_id',) def withdraw_from_payer_balance(self): @@ -212,6 +213,9 @@ class Transaction(models.Model): return 0 def update_details(self, force_update=False): + if not isinstance(self.details, dict): + self.details = {} + self.save() # detail = {'payer_name', 'payee_name', 'application_name', 'payer_avatar_url', 'payee_avatar_url', 'application_avatar_url'} is_updated = False if not self.details.get('payer_name'): @@ -240,10 +244,13 @@ class Transaction(models.Model): if not self.details.get('application_name'): application_details = get_application_details(self.application_id) - self.details['application_name'] = application_details.name + try: + self.details['application_name'] = application_details.name # TODO: get avatar from details - is_updated = True + is_updated = True + except Exception as e: + pass if is_updated: self.save() diff --git a/apps/wallet/views/user.py b/apps/wallet/views/user.py index 73598c3..838f894 100755 --- a/apps/wallet/views/user.py +++ b/apps/wallet/views/user.py @@ -188,11 +188,11 @@ class WithdrawVerify(generics.RetrieveAPIView): class TransactionListView(ListView): model = Transaction template_name = 'wallet/transaction_list.html' - ordering = ['-created_at'] def get_queryset(self): user = self.request.user - return Transaction.objects.filter(Q(payee_id=user.pk) | Q(payer_id=user.pk)).all() + qs = super().get_queryset() + return qs.filter(Q(payee_id=user.pk) | Q(payer_id=user.pk)).all() @method_decorator(login_required, name='dispatch')