refactor: optimize model and serializer in task_app
This commit is contained in:
parent
fc12d96e83
commit
cd81ce179d
3 changed files with 12 additions and 20 deletions
|
|
@ -13,7 +13,7 @@ class Task(models.Model):
|
|||
priority = models.CharField(max_length=50, choices=TaskPriority.choices)
|
||||
status = models.CharField(max_length=50, choices=TaskStatus.choices)
|
||||
date = models.DateField()
|
||||
creator = models.ForeignKey(User, related_name="created_tasks", on_delete=models.CASCADE)
|
||||
creator = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
|
|
@ -29,8 +29,8 @@ class SubTask(models.Model):
|
|||
return f"{self.task.title} - {self.title}"
|
||||
|
||||
class AssignedTask(models.Model):
|
||||
user = models.ForeignKey(User, related_name="assigned_tasks", on_delete=models.CASCADE)
|
||||
task = models.ForeignKey(Task, related_name="assigned_tasks", on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
task = models.ForeignKey(Task, related_name="assigned", on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.user} - {self.task}"
|
||||
|
|
@ -4,11 +4,9 @@ from djangorestframework_camel_case.parser import CamelCaseJSONParser
|
|||
from .models import Task, SubTask, AssignedTask
|
||||
|
||||
class SubTaskSerializer(serializers.ModelSerializer):
|
||||
task = serializers.CharField(source='task.id')
|
||||
|
||||
class Meta:
|
||||
model = SubTask
|
||||
fields = ['id', 'title', 'status', 'task']
|
||||
fields = ['id', 'title', 'status']
|
||||
|
||||
class AssignedTaskSerializer(serializers.ModelSerializer):
|
||||
user_id = serializers.CharField(source='user.id', read_only=True)
|
||||
|
|
@ -19,10 +17,8 @@ class AssignedTaskSerializer(serializers.ModelSerializer):
|
|||
|
||||
class TaskSerializer(serializers.ModelSerializer):
|
||||
subtasks = SubTaskSerializer(many=True, read_only=True)
|
||||
assignees = AssignedTaskSerializer(source='assigned_tasks', many=True, read_only=True)
|
||||
|
||||
def get_assignees(self, obj):
|
||||
return list(obj.assigned_tasks.all().values('user_id'))
|
||||
assignees = AssignedTaskSerializer(source='assigned', many=True, read_only=True)
|
||||
creator = serializers.CharField(source='creator.id', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Task
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import uuid
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth import get_user_model
|
||||
from task_app.models import Task, SubTask, AssignedTask
|
||||
|
|
@ -11,17 +10,14 @@ User = get_user_model()
|
|||
class SerializerTests(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
user = User.objects.create(first_name="Test", last_name="User", email="test@example.com")
|
||||
self.user = user
|
||||
self.test_date = date(2025, 1, 1)
|
||||
|
||||
self.user = User.objects.create(first_name="Test", last_name="User", email="test@example.com")
|
||||
self.task = Task.objects.create(
|
||||
title="Test Task 1",
|
||||
description="Description 1",
|
||||
category=TaskCategory.TECHNICAL_TASK,
|
||||
priority=TaskPriority.LOW,
|
||||
status=TaskStatus.TODO,
|
||||
date=self.test_date,
|
||||
date='2025-01-01',
|
||||
creator=self.user
|
||||
)
|
||||
|
||||
|
|
@ -32,7 +28,7 @@ class SerializerTests(TestCase):
|
|||
|
||||
def test_subtask_serializer(self):
|
||||
serializer = SubTaskSerializer(self.subtask1)
|
||||
expected_data = {'id': str(self.subtask1.id), 'title': 'SubTask 1', 'status': True, 'task': str(self.task.id)}
|
||||
expected_data = {'id': str(self.subtask1.id), 'title': 'SubTask 1', 'status': True}
|
||||
self.assertEqual(serializer.data, expected_data)
|
||||
|
||||
def test_assigned_task_serializer(self):
|
||||
|
|
@ -50,11 +46,11 @@ class SerializerTests(TestCase):
|
|||
'priority': 'low',
|
||||
'status': 'todo',
|
||||
'date': '2025-01-01',
|
||||
'creator': self.user.id,
|
||||
'creator': str(self.user.id),
|
||||
'created_at': self.task.created_at.isoformat().replace('+00:00', 'Z'),
|
||||
'subtasks': [
|
||||
{'id': str(self.subtask1.id), 'title': 'SubTask 1', 'status': True, 'task': str(self.task.id)},
|
||||
{'id': str(self.subtask2.id), 'title': 'SubTask 2', 'status': False, 'task': str(self.task.id)}
|
||||
{'id': str(self.subtask1.id), 'title': 'SubTask 1', 'status': True},
|
||||
{'id': str(self.subtask2.id), 'title': 'SubTask 2', 'status': False}
|
||||
],
|
||||
'assignees': [{'user_id': str(self.assigned_user.id)}]
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue