feat: scores

This commit is contained in:
2026-06-12 00:26:39 +02:00
parent 4460b5c995
commit db8d1fbc84
14 changed files with 227 additions and 1 deletions
View File
+1
View File
@@ -0,0 +1 @@
# Register your models here.
+34
View File
@@ -0,0 +1,34 @@
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()
+5
View File
@@ -0,0 +1,5 @@
from django.apps import AppConfig
class ScoresConfig(AppConfig):
name = "scores"
@@ -0,0 +1,32 @@
# Generated by Django 6.0.6 on 2026-06-11 22:22
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="Score",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("username", models.CharField(max_length=100)),
("points", models.IntegerField()),
("created_at", models.DateTimeField(auto_now_add=True)),
],
options={
"ordering": ["-points"],
},
),
]
+10
View File
@@ -0,0 +1,10 @@
from django.db import models
class Score(models.Model):
username = models.CharField(max_length=100)
points = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-points"]
+1
View File
@@ -0,0 +1 @@
# Create your tests here.
+1
View File
@@ -0,0 +1 @@
# Create your views here.