From a7b7f11819f1009632564b8826cc7a27fe0e7a85 Mon Sep 17 00:00:00 2001 From: TheSuncatcher222 Date: Sat, 25 Nov 2023 15:45:51 +0300 Subject: [PATCH] Add Users is_municipal filter --- backend/api/v1/schemas_views.py | 44 ++++++++++++++++++++++++++------- backend/api/v1/views.py | 16 ++++++++++++ 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/backend/api/v1/schemas_views.py b/backend/api/v1/schemas_views.py index 8470942..9a81b36 100644 --- a/backend/api/v1/schemas_views.py +++ b/backend/api/v1/schemas_views.py @@ -2,7 +2,7 @@ from rest_framework_simplejwt.serializers import ( TokenObtainPairSerializer, TokenRefreshSerializer, ) -from drf_spectacular.utils import inline_serializer, extend_schema +from drf_spectacular.utils import inline_serializer, extend_schema, OpenApiParameter from user.validators import ( PASS_ERROR, USER_FIRST_NAME_ERROR, USER_LAST_NAME_ERROR, @@ -15,6 +15,7 @@ DEFAULT_400_REQUIRED: str = 'Обязательное поле.' DEFAULT_401: str = 'Учетные данные не были предоставлены.' +DEFAULT_403: str = 'У вас недостаточно прав для выполнения данного действия.' DEFAULT_404: str = 'Страница не найдена.' APPEAL_SCHEMA = { @@ -96,21 +97,21 @@ ), }, ), - status.HTTP_400_BAD_REQUEST: inline_serializer( - name='appeals_post_answer_error_403', + status.HTTP_401_UNAUTHORIZED: inline_serializer( + name='appeals_post_answer_error_400', fields={ 'detail': serializers.CharField( - default=( - 'Вы уже дали официальный ответ обращению.' - ), + default=DEFAULT_401, ), }, ), - status.HTTP_401_UNAUTHORIZED: inline_serializer( - name='appeals_post_answer_error_400', + status.HTTP_403_FORBIDDEN: inline_serializer( + name='appeals_post_answer_error_403', fields={ 'detail': serializers.CharField( - default=DEFAULT_401, + default=( + 'Вы уже дали официальный ответ обращению.' + ), ), }, ), @@ -274,6 +275,15 @@ 'list': extend_schema( description='Возвращает список пользователей.', summary='Получить список пользователей.', + parameters=[ + OpenApiParameter( + name='is_municipal', + location=OpenApiParameter.QUERY, + description='Статус муниципального учреждения.', + required=False, + type=bool, + ), + ], responses={ status.HTTP_200_OK: UserFullSerializer, status.HTTP_401_UNAUTHORIZED: inline_serializer( @@ -284,6 +294,14 @@ ), }, ), + status.HTTP_403_FORBIDDEN: inline_serializer( + name='users_retrieve_error_403', + fields={ + 'detail': serializers.CharField( + default=DEFAULT_403, + ), + }, + ), }, ), 'retrieve': extend_schema( @@ -299,6 +317,14 @@ ), }, ), + status.HTTP_403_FORBIDDEN: inline_serializer( + name='users_retrieve_error_403', + fields={ + 'detail': serializers.CharField( + default=DEFAULT_403, + ), + }, + ), status.HTTP_404_NOT_FOUND: inline_serializer( name='user_retrieve_error_404', fields={ diff --git a/backend/api/v1/views.py b/backend/api/v1/views.py index 21a023d..959f5d5 100644 --- a/backend/api/v1/views.py +++ b/backend/api/v1/views.py @@ -171,3 +171,19 @@ def get_permissions(self): if self.request.method == 'GET': self.permission_classes = [IsAdminUser,] return super().get_permissions() + + def get_queryset(self): + is_municipal: str = self.request.query_params.get('is_municipal') + if is_municipal == 'true': + return User.objects.select_related( + 'address', + ).filter( + is_staff=False, + is_municipal=True, + ) + return User.objects.select_related( + 'address', + ).filter( + is_staff=False, + is_municipal=False, + )