diff --git a/api/logics.py b/api/logics.py index d710fe86..5e66de91 100644 --- a/api/logics.py +++ b/api/logics.py @@ -273,11 +273,10 @@ class Logics: @classmethod def take_order_expires(cls, take_order): - if take_order.expires_at < timezone.now(): - cls.cancel_bond(take_order.taker_bond) - return True - else: - return False + if take_order.expires_at > timezone.now(): + take_order.expires_at = timezone.now() + take_order.save(update_fields=["expires_at"]) + cls.cancel_bond(take_order.taker_bond) @classmethod def order_expires(cls, order): @@ -322,7 +321,7 @@ class Logics: take_orders_queryset = TakeOrder.objects.filter(order=order) for idx, take_order in enumerate(take_orders_queryset): - take_order.cancel(cls) + cls.take_order_expires(take_order) order.save(update_fields=["expiry_reason"]) @@ -446,7 +445,7 @@ class Logics: @classmethod def kick_taker(cls, take_order): """The taker did not lock the taker_bond. Now he has to go""" - take_order.cancel(cls) + cls.take_order_expires(take_order) # Add a time out to the taker if take_order.taker: robot = take_order.taker.robot @@ -1073,7 +1072,7 @@ class Logics: take_orders_queryset = TakeOrder.objects.filter(order=order) for idx, take_order in enumerate(take_orders_queryset): order.log("Pretaker bond was unlocked") - take_order.cancel(cls) + cls.take_order_expires(take_order) send_notification.delay( order_id=order.id, message="public_order_cancelled" diff --git a/api/management/commands/clean_orders.py b/api/management/commands/clean_orders.py index 15706448..764bc401 100644 --- a/api/management/commands/clean_orders.py +++ b/api/management/commands/clean_orders.py @@ -49,8 +49,6 @@ class Command(BaseCommand): order=order, expires_at__gt=timezone.now() ) for idx, take_order in enumerate(take_orders_queryset): - take_order.expires_at = order.expires_at - take_order.save() Logics.take_order_expires(take_order) # It should not happen, but if it cannot locate the hold invoice @@ -77,10 +75,9 @@ class Command(BaseCommand): for idx, take_order in enumerate(take_orders_queryset): context = str(take_order) + " was expired" try: - if Logics.take_order_expires( - take_order - ): # Take order send to expire here - debug["expired_take_orders"].append({idx: context}) + Logics.take_order_expires(take_order) + take_order.delete() + debug["expired_take_orders"].append({idx: context}) # It should not happen, but if it cannot locate the hold invoice # it probably was cancelled by another thread, make it expire anyway. diff --git a/api/management/commands/follow_invoices.py b/api/management/commands/follow_invoices.py index 41e583b6..e6443a18 100644 --- a/api/management/commands/follow_invoices.py +++ b/api/management/commands/follow_invoices.py @@ -302,8 +302,8 @@ class Command(BaseCommand): return elif hasattr(lnpayment, "order_taken"): - self.stderr.write("Expiting take order with cancelled escrow") - Logics.take_order_expires(lnpayment.order_escrow) + self.stderr.write("Expiting order with cancelled escrow") + Logics.order_expires(lnpayment.order_taken) return # TODO If a lnpayment goes from LOCKED to INVGEN. Totally weird diff --git a/api/models/take_order.py b/api/models/take_order.py index 6d191c30..ec7ed259 100644 --- a/api/models/take_order.py +++ b/api/models/take_order.py @@ -2,7 +2,6 @@ from django.core.validators import MaxValueValidator, MinValueValidator from django.contrib.auth.models import User from django.db import models from django.conf import settings -from django.utils import timezone class TakeOrder(models.Model): @@ -41,11 +40,5 @@ class TakeOrder(models.Model): # timestamp of last_satoshis last_satoshis_time = models.DateTimeField(null=True, default=None, blank=True) - def cancel(self, cls): - if self.expires_at > timezone.now(): - self.expires_at = timezone.now() - self.save(update_fields=["expires_at"]) - cls.cancel_bond(self.taker_bond) - def __str__(self): return f"Order {self.order.id} taken by Robot({self.taker.robot.id},{self.taker.username}) for {self.amount} fiat units"