feat(market): add draft status and multiplier

This commit is contained in:
2026-05-24 09:20:01 +02:00
parent 79e7cef3ba
commit e557fe2cda
14 changed files with 121 additions and 46 deletions
+7 -5
View File
@@ -20,8 +20,8 @@ router = Router(tags=["market"])
@router.get("/", response=List[MarketListSchema])
def list_markets(request):
"""List all markets."""
markets = Market.objects.all()
"""List all markets (excludes draft markets)."""
markets = Market.objects.exclude(status=Market.Status.DRAFT)
# Prefetch options with total_bets annotation sorted by total_bets desc, then text asc
options_queryset = MarketOption.objects.annotate(
total_bets=Coalesce(Sum("user_bets__amount"), 0)
@@ -52,7 +52,7 @@ def close_market(request, market_uuid: str):
market = get_object_or_404(Market, uuid=market_uuid)
market.status = Market.Status.CLOSED
market.save(update_fields=["status", "updated_at"])
return {"status": "closed"}
return {"status": Market.Status.CLOSED}
@router.post("/{market_uuid}/actions/resolve", response=MarketListSchema)
@@ -91,10 +91,12 @@ def resolve_market(request, market_uuid: str, payload: ResolveMarketSchema):
users_to_update = []
with transaction.atomic():
# Award payouts to winners
# Award payouts to winners with multiplier
if total_winning > 0:
for bet in winning_bets:
payout = round(bet.amount / total_winning * total_pot)
payout = round(
bet.amount / total_winning * total_pot * market.multiplier
)
bet.user.points += payout
users_to_update.append(bet.user)
point_changes.append(