84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
|
|
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"})
|