initial commit

This commit is contained in:
2026-03-11 17:12:28 +08:00
commit 5d1e1cb7cb
61 changed files with 2971 additions and 0 deletions

57
core/serializers/base.py Normal file
View File

@@ -0,0 +1,57 @@
from django.contrib.auth import get_user_model
from drf_spectacular.utils import extend_schema_field
from rest_framework import serializers
from core.serializers.mini import UserMiniSerializer
User = get_user_model()
class BaseModelSerializer(serializers.ModelSerializer):
"""
Base serializer for all models inheriting from BaseModel.
Returns audit fields with a nested user mini representation.
"""
id = serializers.UUIDField(read_only=True)
created_by = UserMiniSerializer(read_only=True)
updated_by = UserMiniSerializer(read_only=True)
created_at = serializers.SerializerMethodField()
updated_at = serializers.SerializerMethodField()
can_delete = serializers.SerializerMethodField()
class Meta:
model = None
fields = (
"id",
"created_by",
"updated_by",
"created_at",
"updated_at",
"can_delete",
)
read_only_fields = fields
def to_internal_value(self, data):
if isinstance(data, dict):
data = data.copy()
for name, field in self.fields.items():
if (
name in data
and data[name] is None
and isinstance(field, (serializers.CharField, serializers.URLField))
):
data[name] = ""
return super().to_internal_value(data)
@extend_schema_field(serializers.CharField)
def get_created_at(self, obj) -> str:
return obj.created_at_display
@extend_schema_field(serializers.CharField)
def get_updated_at(self, obj) -> str:
return obj.updated_at_display
@extend_schema_field(serializers.BooleanField)
def get_can_delete(self, obj) -> bool:
return bool(getattr(obj, "can_delete", False))

11
core/serializers/mini.py Normal file
View File

@@ -0,0 +1,11 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserMiniSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ("id", "first_name", "last_name", "mobile")
read_only_fields = fields