from django.contrib.auth import get_user_model from rest_framework import generics, filters from rest_framework.permissions import IsAuthenticated from drf_spectacular.utils import extend_schema from core.apps.accounts.serializers.user import UserSerializer, AdminUserSerializer from core.apps.accounts.choices.user import RoleChoice from django_core.mixins import BaseViewSetMixin from rest_framework.viewsets import ModelViewSet User = get_user_model() @extend_schema(tags=['User']) class UserListApiView(generics.ListAPIView): queryset = User.objects.filter(role=RoleChoice.USER) serializer_class = UserSerializer permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ['phone', 'first_name', 'last_name'] def serializer_context(self): return self.serializer_class(context={"request": self.request}) @extend_schema(tags=['User']) class AdminUserListApiView(generics.ListAPIView): queryset = User.objects.exclude(role=RoleChoice.USER) serializer_class = UserSerializer permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ['phone', 'first_name', 'last_name'] @extend_schema(tags=["User"],request=AdminUserSerializer) class AdminUserView(BaseViewSetMixin, ModelViewSet): queryset = User.objects.filter(role=RoleChoice.USER) serializer_class = AdminUserSerializer permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter] search_fields = ['phone', 'first_name', 'last_name'] def serializer_context(self): return self.serializer_class(context={"request": self.request})