selecta-highscore/highscore/scores/api.py
2026-06-12 00:26:39 +02:00

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()