From 57f43a870072fb1699868b2916e3b1822706d0ea Mon Sep 17 00:00:00 2001 From: Ehouarn Date: Fri, 18 Jul 2025 13:54:37 +0200 Subject: [PATCH] API --- apps/family/api/__init__.py | 0 apps/family/api/serializers.py | 46 +++++++++++++++++++++++++ apps/family/api/urls.py | 14 ++++++++ apps/family/api/views.py | 61 ++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 apps/family/api/__init__.py create mode 100644 apps/family/api/serializers.py create mode 100644 apps/family/api/urls.py create mode 100644 apps/family/api/views.py diff --git a/apps/family/api/__init__.py b/apps/family/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/family/api/serializers.py b/apps/family/api/serializers.py new file mode 100644 index 00000000..c902a9c5 --- /dev/null +++ b/apps/family/api/serializers.py @@ -0,0 +1,46 @@ +# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from rest_framework import serializers + +from ..models import Family, FamilyMembership, Challenge, Achievement + + +class FamilySerializer(serializers.ModelSerializer): + """ + REST API Serializer for Family. + The djangorestframework plugin will analyse the model `Family` and parse all fields in the API. + """ + class Meta: + model = Family + fields = '__all__' + + +class FamilyMembershipSerializer(serializers.ModelSerializer): + """ + REST API Serializer for FamilyMembership. + The djangorestframework plugin will analyse the model `FamilyMembership` and parse all fields in the API. + """ + class Meta: + model = FamilyMembership + fields = '__all__' + + +class ChallengeSerializer(serializers.ModelSerializer): + """ + REST API Serializer for Challenge. + The djangorestframework plugin will analyse the model `Challenge` and parse all fields in the API. + """ + class Meta: + model = Challenge + fields = '__all__' + + +class AchievementSerializer(serializers.ModelSerializer): + """ + REST API Serializer for Achievement. + The djangorestframework plugin will analyse the model `Achievement` and parse all fields in the API. + """ + class Meta: + model = Achievement + fields = '__all__' diff --git a/apps/family/api/urls.py b/apps/family/api/urls.py new file mode 100644 index 00000000..43c49500 --- /dev/null +++ b/apps/family/api/urls.py @@ -0,0 +1,14 @@ +# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from .views import FamilyViewSet, FamilyMembershipViewSet, ChallengeViewSet, AchievementViewSet + + +def register_family_urls(router, path): + """ + Configure router for Family REST API + """ + router.register(path + 'family', FamilyViewSet) + router.register(path + 'familymembership', FamilyMembershipViewSet) + router.register(path + 'challenge', ChallengeViewSet) + router.register(path + 'achievement', AchievementViewSet) diff --git a/apps/family/api/views.py b/apps/family/api/views.py new file mode 100644 index 00000000..0e228718 --- /dev/null +++ b/apps/family/api/views.py @@ -0,0 +1,61 @@ +# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from api.viewsets import ReadProtectedModelViewSet +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework.filters import SearchFilter + +from .serializers import FamilySerializer, FamilyMembershipSerializer, ChallengeSerializer, AchievementSerializer +from ..models import Family, FamilyMembership, Challenge, Achievement + + +class FamilyViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all `Family` objects, serialize it to JSON with the given serializer, + then render it on /api/family/family/ + """ + queryset = Family.object.order_by('id') + serializer_class = FamilySerializer + filter_backends = [DjangoFilterBackend, SearchFilter] + filterset_fields = ['name', ] + search_fields = ['§name', ] + + +class FamilyMembershipViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all `FamilyMembership` objects, serialize it to JSON with the given serializer, + then render it on /api/family/familymembership/ + """ + queryset = FamilyMembership.object.order_by('id') + serializer_class = FamilyMembershipSerializer + filter_backends = [DjangoFilterBackend, SearchFilter] + filterset_fields = ['name', ] + search_fields = ['§name', ] + + +class ChallengeViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all `Challenge` objects, serialize it to JSON with the given serializer, + then render it on /api/family/challenge/ + """ + queryset = Challenge.object.order_by('id') + serializer_class = ChallengeSerializer + filter_backends = [DjangoFilterBackend, SearchFilter] + filterset_fields = ['name', ] + search_fields = ['§name', ] + + +class AchievementViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all `Achievement` objects, serialize it to JSON with the given serializer, + then render it on /api/family/achievement/ + """ + queryset = Achievement.object.order_by('id') + serializer_class = AchievementSerializer + filter_backends = [DjangoFilterBackend, SearchFilter] + filterset_fields = ['name', ] + search_fields = ['§name', ]