From b42a5a9abb86aa7f40f3142fb96e01e6f3bb51d3 Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 7 Feb 2025 20:35:27 +0930 Subject: [PATCH] feat(itim): Porte Notes ViewSet ref: #526 #536 --- app/api/urls_v2.py | 3 +- app/itim/serializers/port.py | 8 +++- app/itim/viewsets/port_notes.py | 66 +++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 app/itim/viewsets/port_notes.py diff --git a/app/api/urls_v2.py b/app/api/urls_v2.py index f051abea..a5692e62 100644 --- a/app/api/urls_v2.py +++ b/app/api/urls_v2.py @@ -80,6 +80,7 @@ from itim.viewsets import ( cluster_type_notes, incident, port as port_v2, + port_notes, problem, service as service_v2, service_cluster, @@ -195,7 +196,7 @@ router.register('settings/knowledge_base_category', knowledge_base_category_v2.V router.register('settings/manufacturer', manufacturer_v2.ViewSet, basename='_api_v2_manufacturer') router.register('settings/manufacturer/(?P[0-9]+)/notes', manufacturer_notes.ViewSet, basename='_api_v2_manufacturer_note') router.register('settings/port', port_v2.ViewSet, basename='_api_v2_port') -# router.register('settings/port/(?P[0-9]+)/notes', notes_v2.ViewSet, basename='_api_v2_port_notes') +router.register('settings/port/(?P[0-9]+)/notes', port_notes.ViewSet, basename='_api_v2_port_note') router.register('settings/project_state', project_state_v2.ViewSet, basename='_api_v2_project_state') router.register('settings/project_type', project_type_v2.ViewSet, basename='_api_v2_project_type') router.register('settings/software_category', software_category_v2.ViewSet, basename='_api_v2_software_category') diff --git a/app/itim/serializers/port.py b/app/itim/serializers/port.py index e5af826a..8af889ea 100644 --- a/app/itim/serializers/port.py +++ b/app/itim/serializers/port.py @@ -72,7 +72,13 @@ class PortModelSerializer( 'model_pk': item.pk } ), - 'notes': reverse("v2:_api_v2_port_notes-list", request=self._context['view'].request, kwargs={'port_id': item.pk}), + 'notes': reverse( + "v2:_api_v2_port_note-list", + request=self._context['view'].request, + kwargs={ + 'model_id': item.pk + } + ), } diff --git a/app/itim/viewsets/port_notes.py b/app/itim/viewsets/port_notes.py new file mode 100644 index 00000000..8207da4f --- /dev/null +++ b/app/itim/viewsets/port_notes.py @@ -0,0 +1,66 @@ +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse + +from core.viewsets.model_notes import ModelNoteViewSet + +from itim.serializers.port_notes import ( + PortNotes, + PortNoteModelSerializer, + PortNoteViewSerializer +) + + + + +@extend_schema_view( + create=extend_schema( + summary = 'Add a note to a Port', + description = '', + responses = { + 201: OpenApiResponse(description='created', response=PortNoteViewSerializer), + 400: OpenApiResponse(description='Validation failed.'), + 403: OpenApiResponse(description='User is missing create permissions'), + } + ), + destroy = extend_schema( + summary = 'Delete a Port note', + description = '' + ), + list = extend_schema( + summary = 'Fetch all Port notes', + description='', + ), + retrieve = extend_schema( + summary = 'Fetch a single Port note', + description='', + ), + update = extend_schema(exclude = True), + partial_update = extend_schema( + summary = 'Update a Port note', + description = '' + ), +) +class ViewSet(ModelNoteViewSet): + + model = PortNotes + + + def get_serializer_class(self): + + if self.serializer_class is not None: + + return self.serializer_class + + + if ( + self.action == 'list' + or self.action == 'retrieve' + ): + + self.serializer_class = PortNoteViewSerializer + + + else: + + self.serializer_class = PortNoteModelSerializer + + return self.serializer_class