feat(project_management): Project Validation for API v2

ref: #248 #357
This commit is contained in:
2024-10-22 12:40:06 +09:30
parent 85a4158413
commit 663f496dc7
4 changed files with 42 additions and 4 deletions

View File

@ -97,6 +97,16 @@ class NoteModelSerializer(NoteBaseSerializer):
}
)
elif 'project_id' in self._kwargs['context']['view'].kwargs:
_self = reverse("API:_api_v2_project_notes-detail",
request=self._context['view'].request,
kwargs={
'project_id': self._kwargs['context']['view'].kwargs['project_id'],
'pk': item.pk
}
)
elif 'software_id' in self._kwargs['context']['view'].kwargs:
_self = reverse("API:_api_v2_software_notes-detail",

View File

@ -241,11 +241,11 @@ class Project(ProjectCommonFieldsName):
},
{
"name": "Milestones",
"slug": "milestones",
"slug": "milestone",
"sections": [
{
"layout": "table",
"field": "milestones",
"field": "milestone",
}
]
},

View File

@ -1,5 +1,6 @@
from rest_framework.reverse import reverse
from rest_framework import serializers
from rest_framework.fields import empty
from rest_framework.reverse import reverse
from access.serializers.organization import OrganizationBaseSerializer
@ -60,7 +61,7 @@ class ProjectModelSerializer(ProjectBaseSerializer):
}
),
'milestone': reverse("API:_api_v2_project_milestone-list", request=self._context['view'].request, kwargs={'project_id': item.pk}),
'notes': reverse("API:_api_v2_cluster_notes-list", request=self._context['view'].request, kwargs={'cluster_id': item.pk}),
'notes': reverse("API:_api_v2_project_notes-list", request=self._context['view'].request, kwargs={'project_id': item.pk}),
'tickets': 'ToDo'
}
@ -105,6 +106,21 @@ class ProjectModelSerializer(ProjectBaseSerializer):
def __init__(self, instance=None, data=empty, **kwargs):
super().__init__(instance=instance, data=data, **kwargs)
if 'view' in self.context:
if not self.context['view'].is_import_user:
self.Meta.read_only_fields += [
'external_ref',
'external_system',
]
class ProjectViewSerializer(ProjectModelSerializer):
organization = OrganizationBaseSerializer( many = False, read_only = True )

View File

@ -8,6 +8,8 @@ from project_management.serializers.project import (
ProjectViewSerializer
)
from settings.models.user_settings import UserSettings
@extend_schema_view(
@ -64,6 +66,8 @@ class ViewSet( ModelViewSet ):
'state',
]
is_import_user: bool = False
search_fields = [
'name',
'description',
@ -75,8 +79,16 @@ class ViewSet( ModelViewSet ):
view_description = 'Physical Devices'
def get_serializer_class(self):
if self.has_organization_permission(
organization = UserSettings.objects.get(user = self.request.user).default_organization.id,
permissions_required = ['project_management.import_project']
) or self.request.user.is_superuser:
self.is_import_user = True
if (
self.action == 'list'
or self.action == 'retrieve'