35 lines
795 B
Python
35 lines
795 B
Python
from django.http import HttpRequest
|
|
from ninja import Router, Schema
|
|
from ninja.pagination import PageNumberPagination, paginate
|
|
|
|
from .models import Score
|
|
|
|
router = Router()
|
|
|
|
|
|
class ScoreIn(Schema):
|
|
username: str
|
|
points: int
|
|
|
|
|
|
class ScoreOut(Schema):
|
|
id: int
|
|
username: str
|
|
points: int
|
|
created_at: str
|
|
|
|
@staticmethod
|
|
def resolve_created_at(obj: Score) -> str:
|
|
return obj.created_at.isoformat()
|
|
|
|
|
|
@router.post("", response=ScoreOut)
|
|
def submit_score(request: HttpRequest, payload: ScoreIn) -> Score:
|
|
return Score.objects.create(username=payload.username, points=payload.points)
|
|
|
|
|
|
@router.get("", response=list[ScoreOut])
|
|
@paginate(PageNumberPagination, page_size=20)
|
|
def list_scores(request: HttpRequest) -> list[Score]:
|
|
return Score.objects.all()
|