Move serializer

This commit is contained in:
shamoon 2024-04-07 15:15:00 -07:00
parent b7a0c0eb6f
commit 5fdda05afb
2 changed files with 29 additions and 28 deletions

View File

@ -796,6 +796,34 @@ class DocumentSerializer(
) )
class SearchResultSerializer(DocumentSerializer):
def to_representation(self, instance):
doc = (
Document.objects.select_related(
"correspondent",
"storage_path",
"document_type",
"owner",
)
.prefetch_related("tags", "custom_fields", "notes")
.get(id=instance["id"])
)
notes = ",".join(
[str(c.note) for c in doc.notes.all()],
)
r = super().to_representation(doc)
r["__search_hit__"] = {
"score": instance.score,
"highlights": instance.highlights("content", text=doc.content),
"note_highlights": (
instance.highlights("notes", text=notes) if doc else None
),
"rank": instance.rank,
}
return r
class SavedViewFilterRuleSerializer(serializers.ModelSerializer): class SavedViewFilterRuleSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = SavedViewFilterRule model = SavedViewFilterRule

View File

@ -138,6 +138,7 @@ from documents.serialisers import DocumentSerializer
from documents.serialisers import DocumentTypeSerializer from documents.serialisers import DocumentTypeSerializer
from documents.serialisers import PostDocumentSerializer from documents.serialisers import PostDocumentSerializer
from documents.serialisers import SavedViewSerializer from documents.serialisers import SavedViewSerializer
from documents.serialisers import SearchResultSerializer
from documents.serialisers import ShareLinkSerializer from documents.serialisers import ShareLinkSerializer
from documents.serialisers import StoragePathSerializer from documents.serialisers import StoragePathSerializer
from documents.serialisers import TagSerializer from documents.serialisers import TagSerializer
@ -799,34 +800,6 @@ class DocumentViewSet(
return Response(sorted(entries, key=lambda x: x["timestamp"], reverse=True)) return Response(sorted(entries, key=lambda x: x["timestamp"], reverse=True))
class SearchResultSerializer(DocumentSerializer, PassUserMixin):
def to_representation(self, instance):
doc = (
Document.objects.select_related(
"correspondent",
"storage_path",
"document_type",
"owner",
)
.prefetch_related("tags", "custom_fields", "notes")
.get(id=instance["id"])
)
notes = ",".join(
[str(c.note) for c in doc.notes.all()],
)
r = super().to_representation(doc)
r["__search_hit__"] = {
"score": instance.score,
"highlights": instance.highlights("content", text=doc.content),
"note_highlights": (
instance.highlights("notes", text=notes) if doc else None
),
"rank": instance.rank,
}
return r
class UnifiedSearchViewSet(DocumentViewSet): class UnifiedSearchViewSet(DocumentViewSet):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)