diff --git a/app/api/urls_v2.py b/app/api/urls_v2.py index d5f76c07..f2981649 100644 --- a/app/api/urls_v2.py +++ b/app/api/urls_v2.py @@ -28,6 +28,7 @@ from assistance.viewsets import ( index as assistance_index_v2, knowledge_base as knowledge_base_v2, knowledge_base_category as knowledge_base_category_v2, + knowledge_base_notes, model_knowledge_base_article, request as request_ticket_v2, ) @@ -113,6 +114,7 @@ router.register('access/organization/(?P[0-9]+)/team/(?P[0-9]+)/notes', knowledge_base_notes.ViewSet, basename='_api_v2_knowledge_base_note') router.register('assistance/(?P.+)/(?P[0-9]+)/knowledge_base', model_knowledge_base_article.ViewSet, basename='_api_v2_model_kb') router.register('assistance/ticket/request', request_ticket_v2.ViewSet, basename='_api_v2_ticket_request') diff --git a/app/assistance/serializers/knowledge_base.py b/app/assistance/serializers/knowledge_base.py index 4026a320..a3a92390 100644 --- a/app/assistance/serializers/knowledge_base.py +++ b/app/assistance/serializers/knowledge_base.py @@ -69,6 +69,13 @@ class KnowledgeBaseModelSerializer( 'v2:_api_v2_knowledge_base_category-list', request=self.context['view'].request, ), + 'notes': reverse( + "v2:_api_v2_knowledge_base_note-list", + request=self._context['view'].request, + kwargs={ + 'model_id': item.pk + } + ), 'organization': reverse( 'v2:_api_v2_organization-list', request=self.context['view'].request, diff --git a/app/assistance/viewsets/knowledge_base_notes.py b/app/assistance/viewsets/knowledge_base_notes.py new file mode 100644 index 00000000..3f3b6d39 --- /dev/null +++ b/app/assistance/viewsets/knowledge_base_notes.py @@ -0,0 +1,65 @@ +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse + +from assistance.serializers.knowledge_base_notes import ( + KnowledgeBaseNotes, + KnowledgeBaseNoteModelSerializer, + KnowledgeBaseNoteViewSerializer, +) + +from core.viewsets.model_notes import ModelNoteViewSet + + + +@extend_schema_view( + create=extend_schema( + summary = 'Add a note to a knowledge base article', + description = '', + responses = { + 201: OpenApiResponse(description='created', response=KnowledgeBaseNoteViewSerializer), + 400: OpenApiResponse(description='Validation failed.'), + 403: OpenApiResponse(description='User is missing create permissions'), + } + ), + destroy = extend_schema( + summary = 'Delete a knowledge base article note', + description = '' + ), + list = extend_schema( + summary = 'Fetch all knowledge base article notes', + description='', + ), + retrieve = extend_schema( + summary = 'Fetch a single knowledge base article note', + description='', + ), + update = extend_schema(exclude = True), + partial_update = extend_schema( + summary = 'Update a knowledge base article note', + description = '' + ), +) +class ViewSet(ModelNoteViewSet): + + model = KnowledgeBaseNotes + + + 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 = KnowledgeBaseNoteViewSerializer + + + else: + + self.serializer_class = KnowledgeBaseNoteModelSerializer + + return self.serializer_class