Browse Source

add route API get users by group

blezz-tech 1 week ago
parent
commit
757730774a
4 changed files with 35 additions and 0 deletions
  1. 1 0
      apiviews/__init__.py
  2. 1 0
      apiviews/composite/__init__.py
  3. 27 0
      apiviews/composite/user_by_groups.py
  4. 6 0
      urls.py

+ 1 - 0
apiviews/__init__.py

@@ -8,3 +8,4 @@ from .relationship import RelationshipMVS
 from .resource import ResourceMVS
 from .service import ServiceMVS
 from .service_category import ServiceCategoryMVS
+from .composite import *

+ 1 - 0
apiviews/composite/__init__.py

@@ -0,0 +1 @@
+from .user_by_groups import *

+ 27 - 0
apiviews/composite/user_by_groups.py

@@ -0,0 +1,27 @@
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group
+from rest_framework.response import Response
+from rest_framework.exceptions import NotFound
+from rest_framework import serializers
+from rest_framework.views import APIView
+from rest_framework.permissions import IsAuthenticated
+from rest_framework_api_key.permissions import HasAPIKey
+
+class UserSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = get_user_model()
+        fields = ['id', 'username', 'email']
+
+class GroupUsersAPIView(APIView):
+    permission_classes = [IsAuthenticated | HasAPIKey]
+
+    def get(self, request, group_name):
+        try:
+            group = Group.objects.get(name=group_name)
+        except Group.DoesNotExist:
+            raise NotFound(f"Group '{group_name}' not found.")
+        
+        users = group.user_set.all()
+        serializer = UserSerializer(users, many=True)
+        return Response(serializer.data)
+

+ 6 - 0
urls.py

@@ -15,6 +15,12 @@ router.register(r'resource', ResourceMVS)
 router.register(r'service', ServiceMVS)
 router.register(r'service_category', ServiceCategoryMVS)
 
+
+api_v2_patterns = [
+    path('groups/<str:group_name>/users', GroupUsersAPIView.as_view(), name='group-users'),
+]
+
 urlpatterns = [
     path('api/', include(router.urls), name="dbsynced"),
+    path("api/v2/", include(api_v2_patterns)),
 ]