From 1069b803179c8397a85486f7c7c9dd1ee7fe7c40 Mon Sep 17 00:00:00 2001 From: Martin Quarda Date: Mon, 6 May 2024 14:47:22 +0200 Subject: [PATCH] results table --- alkator/urls.py | 3 ++- alkatorapi/models.py | 5 +++++ alkatorapi/views.py | 21 ++++++++++++++++++++- frontend/src/scripts/index.js | 28 ++++++++++++++++++++++++++-- 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/alkator/urls.py b/alkator/urls.py index fe6d747..e20094a 100644 --- a/alkator/urls.py +++ b/alkator/urls.py @@ -16,9 +16,10 @@ Including another URLconf """ from django.contrib import admin from django.urls import path -from alkatorapi.views import register +from alkatorapi.views import register, results urlpatterns = [ path('admin/', admin.site.urls), path('api/register', register), + path('api/results', results), ] diff --git a/alkatorapi/models.py b/alkatorapi/models.py index c5177cb..3982abf 100644 --- a/alkatorapi/models.py +++ b/alkatorapi/models.py @@ -6,6 +6,11 @@ ALKATOR_CHOICES =( (3, "Nealkátor"), ) +ALKATOR_CHOICES_DICT = { + alkator_choice[0]: alkator_choice[1] + for alkator_choice in ALKATOR_CHOICES +} + class User(models.Model): first_name = models.CharField(max_length=120) last_name = models.CharField(max_length=120) diff --git a/alkatorapi/views.py b/alkatorapi/views.py index 62a2b42..0c9f671 100644 --- a/alkatorapi/views.py +++ b/alkatorapi/views.py @@ -2,8 +2,9 @@ from django.shortcuts import render from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from datetime import date, datetime +import json -from .models import User +from .models import User, ALKATOR_CHOICES_DICT @csrf_exempt @@ -40,3 +41,21 @@ def register(request): ) user.save() return HttpResponse('{"success":"Úspěšná registrace."}', content_type='application/json') + + +def results(request): + results = [] + n = 1 + for user in User.objects.order_by('duration'): + if user.alkator_category == 1: + order = f'{n}.' + n += 1 + else: + order = 'x.' + results.append({ + 'order': order, + 'duration': user.duration, + 'alkator_category': ALKATOR_CHOICES_DICT[user.alkator_category], + 'starting_number': user.starting_number, + }) + return HttpResponse(json.dumps(results), content_type='application/json') \ No newline at end of file diff --git a/frontend/src/scripts/index.js b/frontend/src/scripts/index.js index 48cb12b..088aa08 100644 --- a/frontend/src/scripts/index.js +++ b/frontend/src/scripts/index.js @@ -15,13 +15,17 @@ class Main extends Component { text: "", status: "", faq: false, + results: [], }; + fetch(addr_prefix + "/api/results").then(resp => resp.json()).then(json => { + this.setState({results: json}) + }) } onSubmit(event){ event.preventDefault(); let form = document.getElementById("form"); let formData = new FormData(form); - fetch("/api/register", { + fetch(addr_prefix + "/api/register", { method:"POST", body: formData, }).then(resp => resp.json()).then(json => { @@ -106,7 +110,7 @@ class Main extends Component {
-

Další ročník bude teprve oznámen!

+

Další ročník bude teprve oznámen!

{/*
@@ -156,6 +160,26 @@ class Main extends Component {

Sportem ku chlastu!

+ {this.state.results && + + + + + + + + + {this.state.results.map(user => + + + + + + + )} + +
UmístěníČasKategorieStartovní číslo
{user.order}{user.duration}{user.alkator_category}{user.starting_number}
+ } {/* */}