mirror of
https://github.com/TurTaskProject/TurTaskWeb.git
synced 2025-12-19 22:14:07 +01:00
119 lines
3.9 KiB
Python
119 lines
3.9 KiB
Python
from rest_framework import serializers
|
|
from users.models import CustomUser
|
|
from boards.models import ListBoard
|
|
from tasks.models import Todo, RecurrenceTask, Habit, Subtask
|
|
|
|
class TaskSerializer(serializers.ModelSerializer):
|
|
tags = serializers.SerializerMethodField()
|
|
sub_task_count = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Todo
|
|
fields = '__all__'
|
|
|
|
def create(self, validated_data):
|
|
user_id = validated_data.get('user')
|
|
|
|
try:
|
|
user = CustomUser.objects.get(id=user_id)
|
|
except CustomUser.DoesNotExist:
|
|
raise serializers.ValidationError("User with the provided ID does not exist.")
|
|
|
|
validated_data['user'] = user
|
|
return Todo.objects.create(**validated_data)
|
|
|
|
def get_tags(self, instance):
|
|
return [tag.name for tag in instance.tags.all()]
|
|
|
|
def get_sub_task_count(self, instance):
|
|
return instance.subtask_set.count()
|
|
|
|
class TaskCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Todo
|
|
exclude = ('tags', 'google_calendar_id', 'creation_date', 'last_update',)
|
|
|
|
class ChangeTaskOrderSerializer(serializers.Serializer):
|
|
list_board_id = serializers.IntegerField(
|
|
help_text='ID of the ListBoard for which the task order should be updated.'
|
|
)
|
|
todo_order = serializers.ListField(
|
|
child=serializers.IntegerField(),
|
|
required=False,
|
|
help_text='New order of Todo IDs in the ListBoard.'
|
|
)
|
|
|
|
def validate(self, data):
|
|
list_board_id = data.get('list_board_id')
|
|
todo_order = data.get('todo_order', [])
|
|
|
|
if not ListBoard.objects.filter(id=list_board_id).exists():
|
|
raise serializers.ValidationError('ListBoard does not exist.')
|
|
|
|
existing_tasks = Todo.objects.filter(id__in=todo_order)
|
|
existing_task_ids = set(task.id for task in existing_tasks)
|
|
|
|
non_existing_task_ids = set(todo_order) - existing_task_ids
|
|
|
|
if non_existing_task_ids:
|
|
raise serializers.ValidationError(f'Tasks with IDs {non_existing_task_ids} do not exist.')
|
|
|
|
return data
|
|
|
|
class ChangeTaskListBoardSerializer(serializers.Serializer):
|
|
todo_id = serializers.IntegerField()
|
|
new_list_board_id = serializers.IntegerField()
|
|
new_index = serializers.IntegerField(required=False)
|
|
|
|
def validate(self, data):
|
|
todo_id = data.get('todo_id')
|
|
new_list_board_id = data.get('new_list_board_id')
|
|
new_index = data.get('new_index')
|
|
|
|
if not Todo.objects.filter(id=todo_id, user=self.context['request'].user).exists():
|
|
raise serializers.ValidationError('Todo does not exist for the authenticated user.')
|
|
|
|
if not ListBoard.objects.filter(id=new_list_board_id).exists():
|
|
raise serializers.ValidationError('ListBoard does not exist.')
|
|
|
|
return data
|
|
|
|
class RecurrenceTaskSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RecurrenceTask
|
|
fields = '__all__'
|
|
|
|
def create(self, validated_data):
|
|
# Create a new task with validated data
|
|
return Todo.objects.create(**validated_data)
|
|
|
|
class RecurrenceTaskCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RecurrenceTask
|
|
exclude = ('tags',)
|
|
|
|
|
|
class HabitTaskSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Habit
|
|
fields = '__all__'
|
|
|
|
def create(self, validated_data):
|
|
# Create a new task with validated data
|
|
return Todo.objects.create(**validated_data)
|
|
|
|
|
|
class HabitTaskCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Habit
|
|
exclude = ('tags',)
|
|
|
|
|
|
class SubTaskSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Subtask
|
|
fields = '__all__'
|
|
|
|
def create(self, validated_data):
|
|
# Create a new task with validated data
|
|
return Subtask.objects.create(**validated_data) |