60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
from datetime import datetime
|
|
from typing import List, Optional, Any
|
|
from uuid import UUID
|
|
from ninja import Schema
|
|
from pydantic import field_serializer, model_validator
|
|
|
|
|
|
class MarketOptionSchema(Schema):
|
|
uuid: UUID
|
|
text: str
|
|
total_bets: int = 0
|
|
|
|
@field_serializer("uuid")
|
|
def serialize_uuid(self, value: UUID) -> str:
|
|
return str(value)
|
|
|
|
|
|
class MarketListSchema(Schema):
|
|
uuid: UUID
|
|
title: str
|
|
description: str
|
|
status: str
|
|
end_date: datetime
|
|
multiplier: float = 1.0
|
|
created_at: datetime
|
|
options: List[MarketOptionSchema]
|
|
winning_option: Optional[MarketOptionSchema] = None
|
|
|
|
@field_serializer("uuid")
|
|
def serialize_uuid(self, value: UUID) -> str:
|
|
return str(value)
|
|
|
|
|
|
class ResolveMarketSchema(Schema):
|
|
winning_option_uuid: str
|
|
|
|
|
|
class UserBetCreateSchema(Schema):
|
|
option_uuid: str
|
|
amount: int
|
|
|
|
|
|
class UserBetSchema(Schema):
|
|
uuid: UUID
|
|
amount: int
|
|
created_at: datetime
|
|
option: MarketOptionSchema
|
|
market: Optional[MarketListSchema] = None
|
|
|
|
@field_serializer("uuid")
|
|
def serialize_uuid(self, value: UUID) -> str:
|
|
return str(value)
|
|
|
|
@model_validator(mode="before")
|
|
@classmethod
|
|
def resolve_market_from_option(cls, data: Any) -> Any:
|
|
if hasattr(data, "option") and hasattr(data.option, "market"):
|
|
data.market = data.option.market
|
|
return data
|