robosats/api/models/take_order.py
2025-02-28 21:26:08 +01:00

52 lines
1.6 KiB
Python

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):
amount = models.DecimalField(max_digits=18, decimal_places=8, null=True, blank=True)
order = models.ForeignKey(
"api.Order",
related_name="order",
on_delete=models.CASCADE,
null=False,
default=None,
blank=False,
)
taker = models.ForeignKey(
User,
related_name="pretaker",
on_delete=models.CASCADE,
null=False,
default=None,
blank=False,
)
expires_at = models.DateTimeField()
taker_bond = models.OneToOneField(
"api.LNPayment",
related_name="take_order",
on_delete=models.SET_NULL,
null=True,
default=None,
blank=True,
)
last_satoshis = models.PositiveBigIntegerField(
null=True,
default=None,
validators=[MinValueValidator(0), MaxValueValidator(settings.MAX_TRADE * 2)],
blank=True,
)
# 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"