mirror of
https://github.com/TurTaskProject/TurTaskWeb.git
synced 2025-12-19 05:54:07 +01:00
Add CRUD task, tag, reminder API
This commit is contained in:
parent
cdb71fc463
commit
48a2d6dd7a
@ -20,5 +20,6 @@ from django.urls import path, include
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('api/', include('users.urls')),
|
path('api/', include('users.urls')),
|
||||||
|
path('api/', include('tasks.urls')),
|
||||||
path('accounts/', include('allauth.urls')),
|
path('accounts/', include('allauth.urls')),
|
||||||
]
|
]
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.2.6 on 2023-10-29 11:17
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tasks', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='task',
|
||||||
|
name='reminders',
|
||||||
|
field=models.ManyToManyField(blank=True, to='tasks.reminder'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='task',
|
||||||
|
name='tags',
|
||||||
|
field=models.ManyToManyField(blank=True, to='tasks.tag'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
backend/tasks/migrations/0003_alter_task_difficulty.py
Normal file
18
backend/tasks/migrations/0003_alter_task_difficulty.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.6 on 2023-10-29 12:05
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tasks', '0002_alter_task_reminders_alter_task_tags'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='task',
|
||||||
|
name='difficulty',
|
||||||
|
field=models.PositiveSmallIntegerField(choices=[(1, 'Easy'), (2, 'Normal'), (3, 'Hard'), (4, 'Very Hard'), (5, 'Devil')]),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.2.6 on 2023-10-29 12:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tasks', '0003_alter_task_difficulty'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='reminder',
|
||||||
|
old_name='time',
|
||||||
|
new_name='alertTime',
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='reminder',
|
||||||
|
name='startDate',
|
||||||
|
field=models.DateField(auto_now_add=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
12
backend/tasks/misc/serializers.py
Normal file
12
backend/tasks/misc/serializers.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
from ..models import Reminder, Tag
|
||||||
|
|
||||||
|
class ReminderSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Reminder
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class TagSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Tag
|
||||||
|
fields = '__all__'
|
||||||
11
backend/tasks/misc/views.py
Normal file
11
backend/tasks/misc/views.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from rest_framework import viewsets
|
||||||
|
from ..models import Reminder, Tag
|
||||||
|
from .serializers import ReminderSerializer, TagSerializer
|
||||||
|
|
||||||
|
class ReminderViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Reminder.objects.all()
|
||||||
|
serializer_class = ReminderSerializer
|
||||||
|
|
||||||
|
class TagViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Tag.objects.all()
|
||||||
|
serializer_class = TagSerializer
|
||||||
@ -10,8 +10,8 @@ class Reminder(models.Model):
|
|||||||
- startDate: The optional date for which the reminder is set.
|
- startDate: The optional date for which the reminder is set.
|
||||||
- time: The time at which the reminder is triggered.
|
- time: The time at which the reminder is triggered.
|
||||||
"""
|
"""
|
||||||
startDate = models.DateField(null=True, blank=True)
|
startDate = models.DateField(auto_now_add=True, null=True, blank=True)
|
||||||
time = models.DateTimeField()
|
alertTime = models.DateTimeField(null=False, blank=False)
|
||||||
|
|
||||||
class Tag(models.Model):
|
class Tag(models.Model):
|
||||||
"""
|
"""
|
||||||
@ -59,14 +59,14 @@ class Task(models.Model):
|
|||||||
type = models.CharField(max_length=15, choices=TASK_TYPES, default='habit')
|
type = models.CharField(max_length=15, choices=TASK_TYPES, default='habit')
|
||||||
title = models.TextField()
|
title = models.TextField()
|
||||||
notes = models.TextField(default='')
|
notes = models.TextField(default='')
|
||||||
tags = models.ManyToManyField(Tag)
|
tags = models.ManyToManyField(Tag, blank=True)
|
||||||
completed = models.BooleanField(default=False)
|
completed = models.BooleanField(default=False)
|
||||||
exp = models.FloatField(default=0)
|
exp = models.FloatField(default=0)
|
||||||
priority = models.FloatField(default=1, validators=[
|
priority = models.FloatField(default=1, validators=[
|
||||||
validators.MinValueValidator(0.1),
|
validators.MinValueValidator(0.1),
|
||||||
validators.MaxValueValidator(2),
|
validators.MaxValueValidator(2),
|
||||||
])
|
])
|
||||||
difficulty = models.PositiveSmallIntegerField(choices=DIFFICULTY_CHOICES, unique=True)
|
difficulty = models.PositiveSmallIntegerField(choices=DIFFICULTY_CHOICES)
|
||||||
attribute = models.CharField(max_length=15, choices=[
|
attribute = models.CharField(max_length=15, choices=[
|
||||||
('str', 'Strength'),
|
('str', 'Strength'),
|
||||||
('int', 'Intelligence'),
|
('int', 'Intelligence'),
|
||||||
@ -76,7 +76,7 @@ class Task(models.Model):
|
|||||||
], default='str')
|
], default='str')
|
||||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||||||
challenge = models.BooleanField(default=False)
|
challenge = models.BooleanField(default=False)
|
||||||
reminders = models.ManyToManyField(Reminder)
|
reminders = models.ManyToManyField(Reminder, blank=True)
|
||||||
fromSystem = models.BooleanField(default=False)
|
fromSystem = models.BooleanField(default=False)
|
||||||
creation_date = models.DateTimeField(auto_now_add=True)
|
creation_date = models.DateTimeField(auto_now_add=True)
|
||||||
last_update = models.DateTimeField(auto_now=True)
|
last_update = models.DateTimeField(auto_now=True)
|
||||||
|
|||||||
11
backend/tasks/tasks/serializers.py
Normal file
11
backend/tasks/tasks/serializers.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
from ..models import Task
|
||||||
|
|
||||||
|
class TaskSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Task
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
# Create a new task with validated data
|
||||||
|
return Task.objects.create(**validated_data)
|
||||||
36
backend/tasks/tasks/views.py
Normal file
36
backend/tasks/tasks/views.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
from rest_framework import status
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.generics import CreateAPIView, RetrieveAPIView, RetrieveUpdateAPIView, DestroyAPIView
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from ..models import Task
|
||||||
|
from .serializers import TaskSerializer
|
||||||
|
|
||||||
|
class TaskCreateView(CreateAPIView):
|
||||||
|
queryset = Task.objects.all()
|
||||||
|
serializer_class = TaskSerializer
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
|
||||||
|
if serializer.is_valid():
|
||||||
|
self.perform_create(serializer)
|
||||||
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
||||||
|
class TaskRetrieveView(RetrieveAPIView):
|
||||||
|
queryset = Task.objects.all()
|
||||||
|
serializer_class = TaskSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class TaskUpdateView(RetrieveUpdateAPIView):
|
||||||
|
queryset = Task.objects.all()
|
||||||
|
serializer_class = TaskSerializer
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
|
class TaskDeleteView(DestroyAPIView):
|
||||||
|
queryset = Task.objects.all()
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
16
backend/tasks/urls.py
Normal file
16
backend/tasks/urls.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from django.urls import path, include
|
||||||
|
from rest_framework.routers import DefaultRouter
|
||||||
|
from .tasks.views import TaskCreateView, TaskRetrieveView, TaskUpdateView, TaskDeleteView
|
||||||
|
from .misc.views import TagViewSet, ReminderViewSet
|
||||||
|
|
||||||
|
router = DefaultRouter()
|
||||||
|
router.register(r'reminders', ReminderViewSet)
|
||||||
|
router.register(r'tags', TagViewSet)
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', include(router.urls)),
|
||||||
|
path('tasks/create/', TaskCreateView.as_view(), name="add-task"),
|
||||||
|
path('tasks/<int:pk>/', TaskRetrieveView.as_view(), name='retrieve-task'),
|
||||||
|
path('tasks/<int:pk>/update/', TaskUpdateView.as_view(), name='update-task'),
|
||||||
|
path('tasks/<int:pk>/delete/', TaskDeleteView.as_view(), name='delete-task'),
|
||||||
|
]
|
||||||
@ -1,3 +0,0 @@
|
|||||||
from django.shortcuts import render
|
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
Loading…
Reference in New Issue
Block a user