Coverage for api\views\discipline.py: 97%
31 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Module de vues pour la gestion des disciplines sportives.
4Ce module contient toutes les vues nécessaires pour effectuer des opérations CRUD
5sur les disciplines, ainsi que des fonctionnalités de recherche par nom.
6"""
8import rest_framework.generics
9from django.db.models import Q
10from api.models.discipline import Discipline
11from api.serializers.discipline import DisciplineSerializer
12from authentication.permissions import IsAdmin
13from rest_framework.permissions import IsAuthenticated, AllowAny
16class DisciplineListView(rest_framework.generics.ListAPIView):
17 """
18 Vue pour lister les disciplines avec possibilité de recherche.
20 Permet de récupérer la liste des disciplines sportives disponibles.
21 Supporte la recherche par nom via le paramètre 'search'.
22 Les résultats sont triés par ordre alphabétique du nom.
23 Accessible à tous les utilisateurs (authentifiés ou non).
25 :cvar serializer_class: Sérialiseur utilisé pour la vue
26 :type serializer_class: DisciplineSerializer
27 :cvar permission_classes: Permissions requises pour accéder à la vue
28 :type permission_classes: list
29 """
30 serializer_class = DisciplineSerializer
31 permission_classes = [AllowAny]
33 def get_queryset(self):
34 """
35 Récupère le queryset des disciplines avec filtrage optionnel.
37 :return: Les disciplines filtrées et triées par nom
38 :rtype: QuerySet[Discipline]
39 """
40 queryset = Discipline.objects.all()
41 search = self.request.GET.get('search', None)
42 if search:
43 queryset = queryset.filter(Q(nom__istartswith=search))
44 return queryset.order_by('nom')
47class DisciplineDetailView(rest_framework.generics.RetrieveAPIView):
48 """
49 Vue pour récupérer les détails d'une discipline spécifique.
51 Permet de récupérer les informations détaillées d'une discipline
52 via son identifiant unique.
53 Accessible à tous les utilisateurs (authentifiés ou non).
55 :cvar queryset: Queryset des disciplines
56 :type queryset: QuerySet[Discipline]
57 :cvar serializer_class: Sérialiseur utilisé pour la vue
58 :type serializer_class: DisciplineSerializer
59 :cvar permission_classes: Permissions requises pour accéder à la vue
60 :type permission_classes: list
61 """
62 queryset = Discipline.objects.all()
63 serializer_class = DisciplineSerializer
64 permission_classes = [AllowAny]
67class DisciplineCreateView(rest_framework.generics.CreateAPIView):
68 """
69 Vue pour créer une nouvelle discipline.
71 Permet aux administrateurs authentifiés de créer de nouvelles disciplines sportives.
72 Nécessite une authentification et des permissions d'administrateur.
74 :cvar queryset: Queryset des disciplines
75 :type queryset: QuerySet[Discipline]
76 :cvar serializer_class: Sérialiseur utilisé pour la vue
77 :type serializer_class: DisciplineSerializer
78 :cvar permission_classes: Permissions requises pour accéder à la vue
79 :type permission_classes: list
80 """
81 queryset = Discipline.objects.all()
82 serializer_class = DisciplineSerializer
83 permission_classes = [IsAuthenticated, IsAdmin]
86class DisciplineUpdateView(rest_framework.generics.UpdateAPIView):
87 """
88 Vue pour mettre à jour une discipline existante.
90 Permet aux administrateurs authentifiés de modifier les informations
91 d'une discipline existante.
92 Nécessite une authentification et des permissions d'administrateur.
94 :cvar queryset: Queryset des disciplines
95 :type queryset: QuerySet[Discipline]
96 :cvar serializer_class: Sérialiseur utilisé pour la vue
97 :type serializer_class: DisciplineSerializer
98 :cvar permission_classes: Permissions requises pour accéder à la vue
99 :type permission_classes: list
100 """
101 queryset = Discipline.objects.all()
102 serializer_class = DisciplineSerializer
103 permission_classes = [IsAuthenticated, IsAdmin]
106class DisciplineDeleteView(rest_framework.generics.DestroyAPIView):
107 """
108 Vue pour supprimer une discipline.
110 Permet aux administrateurs authentifiés de supprimer une discipline existante.
111 Nécessite une authentification et des permissions d'administrateur.
113 :cvar queryset: Queryset des disciplines
114 :type queryset: QuerySet[Discipline]
115 :cvar serializer_class: Sérialiseur utilisé pour la vue
116 :type serializer_class: DisciplineSerializer
117 :cvar permission_classes: Permissions requises pour accéder à la vue
118 :type permission_classes: list
119 """
120 queryset = Discipline.objects.all()
121 serializer_class = DisciplineSerializer
122 permission_classes = [IsAuthenticated, IsAdmin]