Files
ibapp-backend/core/apps/wherehouse/serializers/wherehouse.py
2025-10-01 14:15:44 +05:00

82 lines
2.6 KiB
Python

from django.db import transaction
from rest_framework import serializers
from core.apps.wherehouse.models.wherehouse import WhereHouse
from core.apps.accounts.models import User
from core.apps.accounts.serializers.user import UserListSerializer
from core.apps.projects.models.project import Project
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = [
'id', 'name', 'start_date', 'end_date', 'status'
]
class WhereHouseListSerializer(serializers.ModelSerializer):
users = UserListSerializer(many=True)
projects = ProjectSerializer(many=True)
class Meta:
model = WhereHouse
fields = [
'id', 'name', 'address', 'users', 'projects'
]
class WhereHouseDetailSerializer(serializers.ModelSerializer):
class Meta:
model = WhereHouse
fields = [
'id', 'name', 'address',
]
class WhereHouseCreateSerializer(serializers.Serializer):
name = serializers.CharField()
address = serializers.CharField()
user_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False)
project_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False)
def create(self, validated_data):
with transaction.atomic():
user_ids = validated_data.pop('user_ids', [])
project_ids = validated_data.pop('project_ids', [])
wherehouse = WhereHouse.objects.create(
name=validated_data.get('name'),
address=validated_data.get('address'),
)
if user_ids:
users = User.objects.filter(id__in=user_ids)
wherehouse.users.set(users)
if project_ids:
projects = Project.objects.filter(id__in=project_ids)
for project in projects:
project.wherehouse.add(wherehouse)
project.save()
return wherehouse
class WhereHouseUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = WhereHouse
fields = [
'name', 'address', 'users'
]
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.address = validated_data.get('address', instance.address)
users = validated_data.pop('users', None)
if users is not None:
instance.users.clear()
instance.users.set(users)
instance.save()
return instance