From a92dd74a42ea99db83eba6ea5eb61cda1421535e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 30 Nov 2024 21:22:58 -0800 Subject: [PATCH] Better search endpoints schema --- src/documents/serialisers.py | 4 +-- src/documents/views.py | 49 ++++++++++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index c2453049b..0e1084c0c 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -442,7 +442,7 @@ class TagSerializerVersion1(MatchingModelSerializer, OwnedObjectSerializer): class TagSerializer(MatchingModelSerializer, OwnedObjectSerializer): - def get_text_color(self, obj): + def get_text_color(self, obj) -> str: try: h = obj.color.lstrip("#") rgb = tuple(int(h[i : i + 2], 16) / 256 for i in (0, 2, 4)) @@ -1003,7 +1003,7 @@ class DocumentSerializer( # return full permissions if we're doing a PATCH or PUT context = kwargs.get("context") - if ( + if context is not None and ( context.get("request").method == "PATCH" or context.get("request").method == "PUT" ): diff --git a/src/documents/views.py b/src/documents/views.py index 6a8a60c7e..751048b2a 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -1381,7 +1381,7 @@ class PostDocumentView(GenericAPIView): fields={ "selected_correspondents": serializers.ListSerializer( child=inline_serializer( - name="Correspondent Counts", + name="CorrespondentCounts", fields={ "id": serializers.IntegerField(), "document_count": serializers.IntegerField(), @@ -1390,7 +1390,7 @@ class PostDocumentView(GenericAPIView): ), "selected_tags": serializers.ListSerializer( child=inline_serializer( - name="Tag Counts", + name="TagCounts", fields={ "id": serializers.IntegerField(), "document_count": serializers.IntegerField(), @@ -1399,7 +1399,7 @@ class PostDocumentView(GenericAPIView): ), "selected_document_types": serializers.ListSerializer( child=inline_serializer( - name="DocumentType Counts", + name="DocumentTypeCounts", fields={ "id": serializers.IntegerField(), "document_count": serializers.IntegerField(), @@ -1408,7 +1408,7 @@ class PostDocumentView(GenericAPIView): ), "selected_storage_paths": serializers.ListSerializer( child=inline_serializer( - name="StoragePath Counts", + name="StoragePathCounts", fields={ "id": serializers.IntegerField(), "document_count": serializers.IntegerField(), @@ -1417,7 +1417,7 @@ class PostDocumentView(GenericAPIView): ), "selected_custom_fields": serializers.ListSerializer( child=inline_serializer( - name="CustomField Counts", + name="CustomFieldCounts", fields={ "id": serializers.IntegerField(), "document_count": serializers.IntegerField(), @@ -1558,6 +1558,45 @@ class SearchAutoCompleteView(GenericAPIView): ) +@extend_schema_view( + get=extend_schema( + description="Global search", + parameters=[ + OpenApiParameter( + name="query", + required=True, + type=str, + description="Query to search for", + ), + OpenApiParameter( + name="db_only", + required=False, + type=bool, + description="Search only the database", + ), + ], + responses={ + (200, "application/json"): inline_serializer( + name="SearchResult", + fields={ + "total": serializers.IntegerField(), + "documents": DocumentSerializer(many=True), + "saved_views": SavedViewSerializer(many=True), + "tags": TagSerializer(many=True), + "correspondents": CorrespondentSerializer(many=True), + "document_types": DocumentTypeSerializer(many=True), + "storage_paths": StoragePathSerializer(many=True), + "users": UserSerializer(many=True), + "groups": GroupSerializer(many=True), + "mail_rules": MailRuleSerializer(many=True), + "mail_accounts": MailAccountSerializer(many=True), + "workflows": WorkflowSerializer(many=True), + "custom_fields": CustomFieldSerializer(many=True), + }, + ), + }, + ), +) class GlobalSearchView(PassUserMixin): permission_classes = (IsAuthenticated,) serializer_class = SearchResultSerializer