mirror of
https://github.com/RoboSats/robosats.git
synced 2025-07-20 09:43:23 +00:00
Retro compatible
This commit is contained in:
@ -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
|
||||||
|
|
||||||
|
22
api/views.py
22
api/views.py
@ -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)
|
||||||
|
Reference in New Issue
Block a user