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