davidtran999 commited on
Commit
1175cfe
·
verified ·
1 Parent(s): c7864e0

Upload backend/hue_portal/core/serializers.py with huggingface_hub

Browse files
backend/hue_portal/core/serializers.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from django.contrib.auth import get_user_model
2
+ from django.contrib.auth.password_validation import validate_password
3
+ from rest_framework import serializers
4
+
5
+ from .models import (
6
+ Procedure,
7
+ Fine,
8
+ Office,
9
+ Advisory,
10
+ LegalSection,
11
+ LegalDocument,
12
+ IngestionJob,
13
+ UserProfile,
14
+ )
15
+
16
+ User = get_user_model()
17
+
18
+ class ProcedureSerializer(serializers.ModelSerializer):
19
+ class Meta:
20
+ model = Procedure
21
+ fields = "__all__"
22
+
23
+ class FineSerializer(serializers.ModelSerializer):
24
+ class Meta:
25
+ model = Fine
26
+ fields = "__all__"
27
+
28
+ class OfficeSerializer(serializers.ModelSerializer):
29
+ class Meta:
30
+ model = Office
31
+ fields = "__all__"
32
+
33
+ class AdvisorySerializer(serializers.ModelSerializer):
34
+ class Meta:
35
+ model = Advisory
36
+ fields = "__all__"
37
+
38
+
39
+ class LegalDocumentSerializer(serializers.ModelSerializer):
40
+ uploaded_file_url = serializers.SerializerMethodField()
41
+ image_count = serializers.SerializerMethodField()
42
+
43
+ class Meta:
44
+ model = LegalDocument
45
+ fields = "__all__"
46
+
47
+ def get_uploaded_file_url(self, obj):
48
+ if not obj.uploaded_file:
49
+ return None
50
+ try:
51
+ url = obj.uploaded_file.url
52
+ except ValueError:
53
+ url = obj.uploaded_file.name
54
+ request = self.context.get("request")
55
+ if request:
56
+ return request.build_absolute_uri(url)
57
+ return url
58
+
59
+ def get_image_count(self, obj):
60
+ if hasattr(obj, "_prefetched_objects_cache") and "images" in obj._prefetched_objects_cache:
61
+ return len(obj._prefetched_objects_cache["images"])
62
+ return obj.images.count()
63
+
64
+
65
+ class LegalSectionSerializer(serializers.ModelSerializer):
66
+ document = LegalDocumentSerializer(read_only=True)
67
+ document_id = serializers.IntegerField(source="document.id", read_only=True)
68
+ download_url = serializers.SerializerMethodField()
69
+
70
+ class Meta:
71
+ model = LegalSection
72
+ fields = "__all__"
73
+
74
+ def get_download_url(self, obj):
75
+ request = self.context.get("request")
76
+ if not obj.document:
77
+ return None
78
+ path = f"/api/legal-documents/{obj.document.id}/download/"
79
+ if request:
80
+ return request.build_absolute_uri(path)
81
+ return path
82
+
83
+
84
+ class IngestionJobSerializer(serializers.ModelSerializer):
85
+ document = LegalDocumentSerializer(read_only=True)
86
+
87
+ class Meta:
88
+ model = IngestionJob
89
+ fields = "__all__"
90
+
91
+
92
+ class AuthUserSerializer(serializers.ModelSerializer):
93
+ role = serializers.CharField(source="profile.role", read_only=True)
94
+
95
+ class Meta:
96
+ model = User
97
+ fields = ["id", "username", "email", "first_name", "last_name", "role"]
98
+
99
+
100
+ class AdminUserSerializer(serializers.ModelSerializer):
101
+ """Serializer for admin user management with role and status."""
102
+ role = serializers.CharField(source="profile.role", read_only=True)
103
+ is_active = serializers.BooleanField(read_only=True)
104
+ date_joined = serializers.DateTimeField(read_only=True)
105
+
106
+ class Meta:
107
+ model = User
108
+ fields = ["id", "username", "email", "first_name", "last_name", "role", "is_active", "date_joined"]
109
+
110
+
111
+ class RegisterSerializer(serializers.Serializer):
112
+ username = serializers.CharField(max_length=150)
113
+ email = serializers.EmailField()
114
+ password = serializers.CharField(write_only=True)
115
+ first_name = serializers.CharField(required=False, allow_blank=True, max_length=150)
116
+ last_name = serializers.CharField(required=False, allow_blank=True, max_length=150)
117
+ role = serializers.ChoiceField(choices=UserProfile.Roles.choices, default=UserProfile.Roles.USER)
118
+
119
+ def validate_username(self, value):
120
+ if User.objects.filter(username=value).exists():
121
+ raise serializers.ValidationError("Tên đăng nhập đã tồn tại.")
122
+ return value
123
+
124
+ def validate_email(self, value):
125
+ if User.objects.filter(email=value).exists():
126
+ raise serializers.ValidationError("Email đã tồn tại.")
127
+ return value
128
+
129
+ def validate_password(self, value):
130
+ validate_password(value)
131
+ return value
132
+
133
+ def create(self, validated_data):
134
+ role = validated_data.pop("role", UserProfile.Roles.USER)
135
+ password = validated_data.pop("password")
136
+ user = User.objects.create(**validated_data)
137
+ user.set_password(password)
138
+ user.save()
139
+
140
+ profile, _ = UserProfile.objects.get_or_create(user=user)
141
+ profile.role = role
142
+ profile.save()
143
+ return user