Files
MeridynPharma-Backend/core/apps/shared/views/location.py
2025-11-25 16:50:30 +05:00

94 lines
3.3 KiB
Python

# rest framework
from rest_framework import generics, permissions
# drf yasg
from drf_yasg.utils import swagger_auto_schema
# shared
from core.apps.shared.models import Location, UserLocation
from core.apps.shared.serializers.base import BaseResponseSerializer, SuccessResponseSerializer
from core.apps.shared.serializers.location import CreateLocationSerializer, LocationSerializer, UserLocationSerializer
from core.apps.shared.utils.response_mixin import ResponseMixin
class LocationListApiView(generics.GenericAPIView, ResponseMixin):
serializer_class = LocationSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return Location.objects.filter(user=self.request.user).select_related('district', 'place', 'doctor', 'pharmacy')
@swagger_auto_schema(
responses={
200: SuccessResponseSerializer(),
400: BaseResponseSerializer(),
500: BaseResponseSerializer(),
}
)
def get(self, request):
try:
serializer = self.serializer_class(self.get_queryset(), many=True)
return self.success_response(data=serializer.data, message='malumotlar fetch qilindi')
except Exception as e:
return self.error_response(data=str(e), message='xatolik')
class LocationCreateApiView(generics.GenericAPIView, ResponseMixin):
serializer_class = CreateLocationSerializer
queryset = Location.objects.all()
permission_classes = [permissions.IsAuthenticated]
@swagger_auto_schema(
responses={
201: SuccessResponseSerializer(),
400: BaseResponseSerializer(),
500: BaseResponseSerializer(),
}
)
def post(self, request):
try:
serializer = self.serializer_class(data=request.data, context={'user': request.user})
if serializer.is_valid():
obj = serializer.save()
return self.success_response(
data=LocationSerializer(obj).data,
message='malumot qoshildi'
)
return self.failure_response(
data=serializer.errors,
message='malumot qoshilmadi'
)
except Exception as e:
return self.error_response(data=str(e), message='xatolik')
# UserLocation
class UserLocationApiView(generics.GenericAPIView, ResponseMixin):
serializer_class = UserLocationSerializer
queryset = UserLocation.objects.all()
permission_classes = [permissions.IsAuthenticated]
@swagger_auto_schema(
responses={
201: SuccessResponseSerializer(),
400: BaseResponseSerializer(),
500: BaseResponseSerializer(),
}
)
def post(self, request):
try:
serializer = self.serializer_class(data=request.data, context={'user': request.user})
if serializer.is_valid():
serializer.save()
return self.success_response(
message='malumot qoshildi'
)
return self.failure_response(
data=serializer.errors,
message='malumot qoshilmadi'
)
except Exception as e:
return self.error_response(data=str(e), message='xatolik')