add: core.utils.get_context_field is added which can be used with drf serializer contexts, documentation is added

This commit is contained in:
2025-08-06 10:11:23 +05:00
parent 59d1fe4a9a
commit 11834f3072
4 changed files with 91 additions and 24 deletions

View File

@@ -34,7 +34,7 @@ from core.apps.companies.serializers import (
CreateCompanyFolderSerializer,
BaseCompanyAccountSerializer,
CreateCompanyFolderFromCompanySerializer
CreateFolderForCompanySerializer
)
from core.apps.contracts.serializers import (
@@ -50,6 +50,9 @@ from core.apps.contracts.models import (
UserModel = get_user_model()
######################################################################
# View Only For Company CRUD That Belongs To Admin.
######################################################################
@extend_schema(tags=["Company"])
class CompanyView(BaseViewSetMixin, ModelViewSet):
queryset = CompanyModel.objects.all()
@@ -72,6 +75,9 @@ class CompanyView(BaseViewSetMixin, ModelViewSet):
}
######################################################################
# company/<uuid:pk>/contract Views
######################################################################
class CompanyContractViewSet(BaseViewSetMixin, GenericViewSet):
queryset = CompanyModel.objects.all()
permission_classes = [AllowAny]
@@ -110,6 +116,9 @@ class CompanyContractViewSet(BaseViewSetMixin, GenericViewSet):
return Response(serializer.data, status=status.HTTP_200_OK)
######################################################################
# company/<uuid:pk>/accounts Views
######################################################################
class CompanyAccountViewSet(BaseViewSetMixin, GenericViewSet):
queryset = CompanyModel.objects.all()
serializer_class = BaseCompanyAccountSerializer
@@ -130,7 +139,6 @@ class CompanyAccountViewSet(BaseViewSetMixin, GenericViewSet):
def list_account(
self,
request: HttpRequest,
pk: uuid.UUID,
*args: object,
**kwargs: object,
) -> Response:
@@ -140,18 +148,20 @@ class CompanyAccountViewSet(BaseViewSetMixin, GenericViewSet):
return Response(data=ser.data, status=status.HTTP_200_OK)
######################################################################
# company/<uuid:pk>/folders Views
######################################################################
class CompanyFolderViewSet(BaseViewSetMixin, GenericViewSet):
queryset = CompanyModel.objects.all()
permission_classes = [AllowAny]
# serializer_class = BaseCompanyFolderSerializer
action_permission_classes = {
"list_folder": [IsCompanyAccount],
"create_folder": [IsCompanyAccount],
}
action_serializer_class = { # type: ignore
"list_folder": RetrieveCompanyFolderSerializer,
"create_folder": CreateCompanyFolderFromCompanySerializer,
"list_folder": RetrieveCompanyFolderSerializer,
"create_folder": CreateFolderForCompanySerializer,
}
@extend_schema(
@@ -159,15 +169,12 @@ class CompanyFolderViewSet(BaseViewSetMixin, GenericViewSet):
description="List Company Folders"
)
@action(methods=["GET"], detail=True, url_path="folders")
def list_folder(
self,
request: HttpRequest,
*args: object,
**kwargs: object,
) -> Response:
def list_folder(self, *args: object, **kwargs: object) -> Response:
company = self.get_object()
folders = CompanyFolderModel.objects.filter(company=company)
ser = self.get_serializer(instance=folders, many=True, context={"company_id": company.pk}) # type: ignore
ser = self.get_serializer(
instance=folders, many=True, context={"company_id": company.pk}
) # type: ignore
return Response(data=ser.data, status=status.HTTP_200_OK)
@extend_schema(
@@ -175,15 +182,9 @@ class CompanyFolderViewSet(BaseViewSetMixin, GenericViewSet):
description="Create Folder for company",
)
@action(url_path="folders", detail=True, methods=["POST"])
def create_folder(
self,
request: HttpRequest,
pk: uuid.UUID,
*args: object,
**kwargs: object,
) -> Response:
def create_folder(self, request: HttpRequest, *args: object, **kwargs: object) -> Response:
company = self.get_object()
data = request.data.copy() | dict(company=company.id) # type: ignore
ser = CreateCompanyFolderSerializer(data=data) # type: ignore
ser = self.get_serializer(data=data) # type: ignore
ser.is_valid(raise_exception=True)
return Response(data=ser.data, status=status.HTTP_201_CREATED)