from django.db.models import Max from django.shortcuts import get_object_or_404 from rest_framework import status from rest_framework.decorators import api_view, permission_classes from rest_framework.pagination import PageNumberPagination from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from apps.common.serializers import AuthGroupSerializer from apps.core.models import AuthGroup @api_view(["GET"]) @permission_classes([IsAuthenticated]) def get_group_list(request): name = request.GET.get("name", None) page_size = request.GET.get("page_size", None) filter_kwargs = {} if name: filter_kwargs["name"] = name groups = AuthGroup.objects.filter(**filter_kwargs).order_by("name") paginator = PageNumberPagination() paginator.page_size = page_size or 10 result_page = paginator.paginate_queryset(groups, request) serializer = AuthGroupSerializer(result_page, many=True) return paginator.get_paginated_response(serializer.data) @api_view(["GET"]) @permission_classes([IsAuthenticated]) def read_group(request): group_id = request.GET.get("id", None) group = get_object_or_404(AuthGroup, id=group_id) serializer = AuthGroupSerializer(group) return Response(serializer.data) @api_view(["POST"]) @permission_classes([IsAuthenticated]) def add_group(request): data = request.data max_id = AuthGroup.objects.aggregate(Max("id"))["id__max"] data["id"] = (max_id + 1) if max_id is not None else 1 serializer = AuthGroupSerializer(data=data) if serializer.is_valid(): serializer.save() return Response({"message": "Group added successfully"}) return Response( {"error": "Invalid data", "details": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) @api_view(["PUT"]) @permission_classes([IsAuthenticated]) def update_group(request): data = request.data group = get_object_or_404(AuthGroup, id=data.get("id")) serializer = AuthGroupSerializer(instance=group, data=request.data, partial=True) if serializer.is_valid(): serializer.save() return Response({"message": "Group updated successfully"}) return Response( {"error": "Invalid data", "details": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) @api_view(["DELETE"]) @permission_classes([IsAuthenticated]) def delete_group(request): group_id = request.GET.get("id", None) group = get_object_or_404(AuthGroup, id=group_id) group.delete() return Response({"message": "Person deleted successfully"})