File size: 2,309 Bytes
c1096bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from rest_framework import serializers
from .models import (
    Procedure,
    Fine,
    Office,
    Advisory,
    LegalSection,
    LegalDocument,
    IngestionJob,
)

class ProcedureSerializer(serializers.ModelSerializer):
    class Meta:
        model = Procedure
        fields = "__all__"

class FineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Fine
        fields = "__all__"

class OfficeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Office
        fields = "__all__"

class AdvisorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Advisory
        fields = "__all__"


class LegalDocumentSerializer(serializers.ModelSerializer):
    uploaded_file_url = serializers.SerializerMethodField()
    image_count = serializers.SerializerMethodField()

    class Meta:
        model = LegalDocument
        fields = "__all__"

    def get_uploaded_file_url(self, obj):
        if not obj.uploaded_file:
            return None
        try:
            url = obj.uploaded_file.url
        except ValueError:
            url = obj.uploaded_file.name
        request = self.context.get("request")
        if request:
            return request.build_absolute_uri(url)
        return url

    def get_image_count(self, obj):
        if hasattr(obj, "_prefetched_objects_cache") and "images" in obj._prefetched_objects_cache:
            return len(obj._prefetched_objects_cache["images"])
        return obj.images.count()


class LegalSectionSerializer(serializers.ModelSerializer):
    document = LegalDocumentSerializer(read_only=True)
    document_id = serializers.IntegerField(source="document.id", read_only=True)
    download_url = serializers.SerializerMethodField()

    class Meta:
        model = LegalSection
        fields = "__all__"

    def get_download_url(self, obj):
        request = self.context.get("request")
        if not obj.document:
            return None
        path = f"/api/legal-documents/{obj.document.id}/download/"
        if request:
            return request.build_absolute_uri(path)
        return path


class IngestionJobSerializer(serializers.ModelSerializer):
    document = LegalDocumentSerializer(read_only=True)

    class Meta:
        model = IngestionJob
        fields = "__all__"