from rest_framework import generics from rest_framework.permissions import IsAuthenticated from drf_spectacular.utils import extend_schema, OpenApiParameter from drf_spectacular.types import OpenApiTypes from core.apps.shared.serializers.region.district import DistrictSerializer, VillageSerializer, RegionSerializer from core.apps.shared.models import RegionModel, VillageModel, DistrictModel @extend_schema( parameters=[ OpenApiParameter( name="region", type=OpenApiTypes.INT, location=OpenApiParameter.QUERY, description="Filter by region ID" ), OpenApiParameter( name="name", type=OpenApiTypes.STR, location=OpenApiParameter.QUERY, description="Filter by district name" ), ] ) class DistrictListCreateView(generics.ListCreateAPIView): permission_classes = [IsAuthenticated] serializer_class = DistrictSerializer queryset = DistrictModel.objects.all() def get_queryset(self): region = self.request.query_params.get('region') name = self.request.query_params.get('name') if name: return self.queryset.filter(name__icontains=name) if region: return self.queryset.filter(region=region) return super().get_queryset() @extend_schema( parameters=[ OpenApiParameter( name="district", type=OpenApiTypes.INT, location=OpenApiParameter.QUERY, description="Filter by district ID" ), OpenApiParameter( name="name", type=OpenApiTypes.STR, location=OpenApiParameter.QUERY, description="Filter by village name" ), ] ) class VillageListCreateView(generics.ListCreateAPIView): permission_classes = [IsAuthenticated] serializer_class = VillageSerializer queryset = VillageModel.objects.all() def get_queryset(self): district = self.request.query_params.get('district') name = self.request.query_params.get('name') if district: return self.queryset.filter(district=district) if name: return self.queryset.filter(name__icontains=name) return super().get_queryset() class RegionListCreateView(generics.ListCreateAPIView): permission_classes = [IsAuthenticated] serializer_class = RegionSerializer queryset = RegionModel.objects.all()