Skip to content

Commit 38c7068

Browse files
authored
Merge pull request #40 from codersforcauses/issue-24-Create_Leaderboard_API
Issue 24 create leaderboard api
2 parents a6bf25e + a0b9337 commit 38c7068

4 files changed

Lines changed: 60 additions & 3 deletions

File tree

server/api/match/serializers.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from rest_framework import serializers
2+
from .models import Match, Team
3+
4+
5+
class TeamSerializer(serializers.ModelSerializer):
6+
class Meta:
7+
model = Team
8+
fields = "__all__"
9+
read_only_field = "team_id"
10+
11+
12+
class MatchSerializer(serializers.ModelSerializer):
13+
class Meta:
14+
model = Match
15+
fields = "__all__"
16+
read_only_field = "match_id"
17+
18+
19+
class GroupSerializer(serializers.Serializer):
20+
group = serializers.IntegerField()
21+
team = serializers.IntegerField()
22+
team_name = serializers.CharField(max_length=64)
23+
total_points = serializers.IntegerField()

server/api/match/urls.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1+
from django.urls import path, include
2+
from rest_framework.routers import DefaultRouter
3+
from .views import MatchViewSet, TeamViewSet, GroupViewSet
4+
5+
router = DefaultRouter()
6+
router.register(r'matches', MatchViewSet, basename='match')
7+
router.register(r'teams', TeamViewSet, basename='team')
8+
router.register(r'groups', GroupViewSet, basename='group')
19

2-
app_name = "match"
310
urlpatterns = [
11+
path('', include(router.urls)),
412
]

server/api/match/views.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1-
from django.shortcuts import render # noqa
1+
from rest_framework import viewsets, permissions
2+
from .models import Match, Team, MatchResult
3+
from django.db.models import Sum, F
4+
from .serializers import MatchSerializer, TeamSerializer, GroupSerializer
25

3-
# Create your views here.
6+
7+
class MatchViewSet(viewsets.ModelViewSet):
8+
queryset = Match.objects.all()
9+
serializer_class = MatchSerializer
10+
permission_classes = [permissions.IsAuthenticated]
11+
12+
13+
class TeamViewSet(viewsets.ModelViewSet):
14+
queryset = Team.objects.all()
15+
serializer_class = TeamSerializer
16+
permission_classes = [permissions.IsAuthenticated]
17+
18+
19+
class GroupViewSet(viewsets.ModelViewSet):
20+
serializer_class = GroupSerializer
21+
permission_classes = [permissions.IsAuthenticated]
22+
23+
def get_queryset(self):
24+
result = MatchResult.objects.values("team", "team__team_name", "match__group_id")\
25+
.annotate(team_name=F("team__team_name"))\
26+
.annotate(group=F("match__group_id"))\
27+
.annotate(total_points=Sum('point'))
28+
return result

server/api/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
urlpatterns = [
2424
path("admin/", admin.site.urls),
2525
path("api/healthcheck/", include(("api.healthcheck.urls"))),
26+
path("api/match/", include(("api.match.urls"))),
2627
path("api/sponsor/", include(("api.sponsor.urls"))),
2728
]
2829

0 commit comments

Comments
 (0)