model_train_dm/backend/apps/iam/views/group.py

84 lines
2.6 KiB
Python
Raw Normal View History

2026-07-27 17:51:49 +08:00
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"})