Retro compatible

This commit is contained in:
koalasat
2025-03-10 10:11:52 +01:00
parent ffa75ba87f
commit 26802f114a
2 changed files with 16 additions and 16 deletions

View File

@ -184,11 +184,19 @@ class Logics:
@classmethod @classmethod
def take(cls, order, user, amount=None): def take(cls, order, user, amount=None):
is_penalized, time_out = cls.is_penalized(user) is_penalized, time_out = cls.is_penalized(user)
take_order = TakeOrder.objects.filter(
taker=user, order=order, expires_at__gt=timezone.now()
)
if is_penalized: if is_penalized:
return False, { return False, {
"bad_request", "bad_request",
f"You need to wait {time_out} seconds to take an order", f"You need to wait {time_out} seconds to take an order",
} }
elif take_order.exists():
order.log(
f"Order already Pre-Taken by Robot({user.robot.id},{user.username}) for {order.amount} fiat units"
)
return True, None
else: else:
take_order = TakeOrder.objects.create( take_order = TakeOrder.objects.create(
taker=user, taker=user,
@ -202,7 +210,7 @@ class Logics:
take_order.save(update_fields=["amount"]) take_order.save(update_fields=["amount"])
order.log( order.log(
f"Taken by Robot({user.robot.id},{user.username}) for {order.amount} fiat units" f"Pre-Taken by Robot({user.robot.id},{user.username}) for {order.amount} fiat units"
) )
return True, None return True, None

View File

@ -244,17 +244,12 @@ class OrderView(viewsets.ViewSet):
data["penalty"] = request.user.robot.penalty_expiration data["penalty"] = request.user.robot.penalty_expiration
# Add booleans if user is maker, taker, partipant, buyer or seller # Add booleans if user is maker, taker, partipant, buyer or seller
is_pretaker = TakeOrder.objects.filter(
taker=request.user, order=order, expires_at__gt=timezone.now()
).exists()
data["is_maker"] = order.maker == request.user data["is_maker"] = order.maker == request.user
data["is_taker"] = order.taker == request.user data["is_taker"] = order.taker == request.user or is_pretaker
data["is_pretaker"] = ( data["is_participant"] = data["is_maker"] or data["is_taker"]
not data["is_taker"]
and TakeOrder.objects.filter(
taker=request.user, order=order, expires_at__gt=timezone.now()
).exists()
)
data["is_participant"] = (
data["is_maker"] or data["is_taker"] or data["is_pretaker"]
)
# 3.a) If not a participant and order is not public, forbid. # 3.a) If not a participant and order is not public, forbid.
if ( if (
@ -369,11 +364,8 @@ class OrderView(viewsets.ViewSet):
return Response(context, status.HTTP_400_BAD_REQUEST) return Response(context, status.HTTP_400_BAD_REQUEST)
# 6) If status is 'Public' and user is PRETAKER, reply with a TAKER hold invoice. # 6) If status is 'Public' and user is PRETAKER, reply with a TAKER hold invoice.
elif ( elif order.status == Order.Status.PUB and is_pretaker and not data["is_taker"]:
order.status == Order.Status.PUB data["status"] = Order.Status.TAK
and data["is_pretaker"]
and not data["is_taker"]
):
data["total_secs_exp"] = order.t_to_expire(Order.Status.TAK) data["total_secs_exp"] = order.t_to_expire(Order.Status.TAK)
valid, context = Logics.gen_taker_hold_invoice(order, request.user) valid, context = Logics.gen_taker_hold_invoice(order, request.user)