From e23e2cce9b2e89ee40e0c0727875809b62dc2c95 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Sat, 30 Aug 2025 16:16:06 +0500 Subject: [PATCH] add: add folder create api --- .../serializers/counterparty_folder.py | 23 +++++++++++ core/apps/counterparty/urls.py | 9 ++++- .../counterparty/views/counterparty_folder.py | 38 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 core/apps/counterparty/serializers/counterparty_folder.py create mode 100644 core/apps/counterparty/views/counterparty_folder.py diff --git a/core/apps/counterparty/serializers/counterparty_folder.py b/core/apps/counterparty/serializers/counterparty_folder.py new file mode 100644 index 0000000..6e7ef70 --- /dev/null +++ b/core/apps/counterparty/serializers/counterparty_folder.py @@ -0,0 +1,23 @@ +from django.db import transaction + +from rest_framework import serializers + +from core.apps.counterparty.models import CounterpartyFolder + + +class CounterpartyFolderListSerializer(serializers.ModelSerializer): + class Meta: + model = CounterpartyFolder + fields = [ + 'id', 'name' + ] + + +class CounterpartyFolderCreateSerializer(serializers.Serializer): + name = serializers.CharField() + + def create(self, validated_data): + with transaction.atomic(): + return CounterpartyFolder.objects.create( + name=validated_data.get('name'), + ) \ No newline at end of file diff --git a/core/apps/counterparty/urls.py b/core/apps/counterparty/urls.py index db30888..85b3825 100644 --- a/core/apps/counterparty/urls.py +++ b/core/apps/counterparty/urls.py @@ -1,6 +1,7 @@ from django.urls import path, include from core.apps.counterparty.views import counterparty as cp_views +from core.apps.counterparty.views import counterparty_folder as folder_views urlpatterns = [ @@ -9,5 +10,11 @@ urlpatterns = [ path('list/', cp_views.CounterpartyListApiView.as_view()), path('create/', cp_views.CounterpartyCreateApiView.as_view()), ] - )) + )), + path('counterparty_folder/', include( + [ + path('list/', folder_views.CounterpartyFolderListApiView.as_view()), + path('create/', folder_views.CounterpartyCreateApiView.as_view()), + ] + )) ] \ No newline at end of file diff --git a/core/apps/counterparty/views/counterparty_folder.py b/core/apps/counterparty/views/counterparty_folder.py new file mode 100644 index 0000000..78c15e9 --- /dev/null +++ b/core/apps/counterparty/views/counterparty_folder.py @@ -0,0 +1,38 @@ +from rest_framework import generics +from rest_framework.response import Response + +from core.apps.counterparty.models import CounterpartyFolder +from core.apps.counterparty.serializers import counterparty_folder as serializers +from core.apps.accounts.permissions.permissions import HasRolePermission + + +class CounterpartyFolderListApiView(generics.GenericAPIView): + serializer_class = serializers.CounterpartyFolderListSerializer + queryset = CounterpartyFolder.objects.all() + permission_classes = [HasRolePermission] + required_permissions = [] + + def get(self, request): + folders = self.queryset + serializer = self.serializer_class(folders, many=True) + return Response(serializer.data, status=200) + + +class CounterpartyCreateApiView(generics.GenericAPIView): + serializer_class = serializers.CounterpartyFolderCreateSerializer + queryset = CounterpartyFolder.objects.all() + permission_classes = [HasRolePermission] + required_permissions = [] + + def post(self, request): + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(): + serializers.save() + return Response( + {'success': True, 'message': 'created'}, + status=201 + ) + return Response( + {'success': False, 'message': serializer.errors}, + status=400 + )