mirror of
https://github.com/TurTaskProject/TurTaskWeb.git
synced 2025-12-19 22:14:07 +01:00
Add Habit Tasks
This commit is contained in:
parent
038a0c84b7
commit
4d96f8c94e
39
backend/tasks/migrations/0012_habit.py
Normal file
39
backend/tasks/migrations/0012_habit.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Generated by Django 4.2.6 on 2023-11-13 18:15
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('tasks', '0011_recurrencetask'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Habit',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('title', models.TextField()),
|
||||||
|
('notes', models.TextField(default='')),
|
||||||
|
('importance', models.PositiveSmallIntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5')], default=1)),
|
||||||
|
('difficulty', models.PositiveSmallIntegerField(choices=[(1, 'Easy'), (2, 'Normal'), (3, 'Hard'), (4, 'Very Hard'), (5, 'Devil')], default=1)),
|
||||||
|
('challenge', models.BooleanField(default=False)),
|
||||||
|
('fromSystem', models.BooleanField(default=False)),
|
||||||
|
('creation_date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('last_update', models.DateTimeField(auto_now=True)),
|
||||||
|
('google_calendar_id', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('start_event', models.DateTimeField(null=True)),
|
||||||
|
('end_event', models.DateTimeField(null=True)),
|
||||||
|
('streak', models.IntegerField(default=0)),
|
||||||
|
('tags', models.ManyToManyField(blank=True, to='tasks.tag')),
|
||||||
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -73,6 +73,14 @@ class RecurrenceTask(Task):
|
|||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"{self.title} ({self.recurrence_rule})"
|
return f"{self.title} ({self.recurrence_rule})"
|
||||||
|
|
||||||
|
|
||||||
|
class Habit(Task):
|
||||||
|
streak = models.IntegerField(default=0)
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return f"{self.title} ({self.streak})"
|
||||||
|
|
||||||
|
|
||||||
class Subtask(models.Model):
|
class Subtask(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents a subtask associated with a task.
|
Represents a subtask associated with a task.
|
||||||
|
|||||||
@ -1,17 +1,7 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from ..models import Todo
|
from ..models import Todo, RecurrenceTask, Habit
|
||||||
|
|
||||||
class TaskCreateSerializer(serializers.ModelSerializer):
|
class TaskSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
|
||||||
model = Todo
|
|
||||||
# fields = '__all__'
|
|
||||||
exclude = ('tags',)
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
|
||||||
# Create a new task with validated data
|
|
||||||
return Todo.objects.create(**validated_data)
|
|
||||||
|
|
||||||
class TaskGeneralSerializer(serializers.ModelSerializer):
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Todo
|
model = Todo
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
@ -19,3 +9,39 @@ class TaskGeneralSerializer(serializers.ModelSerializer):
|
|||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
# Create a new task with validated data
|
# Create a new task with validated data
|
||||||
return Todo.objects.create(**validated_data)
|
return Todo.objects.create(**validated_data)
|
||||||
|
|
||||||
|
class TaskCreateSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Todo
|
||||||
|
exclude = ('tags',)
|
||||||
|
|
||||||
|
|
||||||
|
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',)
|
||||||
@ -1,22 +1,45 @@
|
|||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from tasks.models import Todo, RecurrenceTask
|
from tasks.models import Todo, RecurrenceTask, Habit
|
||||||
from .serializers import TaskCreateSerializer, TaskGeneralSerializer
|
from tasks.tasks.serializers import (TaskCreateSerializer,
|
||||||
|
TaskSerializer,
|
||||||
|
RecurrenceTaskSerializer,
|
||||||
|
RecurrenceTaskCreateSerializer,
|
||||||
|
HabitTaskSerializer,
|
||||||
|
HabitTaskCreateSerializer)
|
||||||
|
|
||||||
|
|
||||||
class TodoViewSet(viewsets.ModelViewSet):
|
class TodoViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Todo.objects.all()
|
queryset = Todo.objects.all()
|
||||||
serializer_class = TaskGeneralSerializer
|
serializer_class = TaskSerializer
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def get_serializer_class(self):
|
def get_serializer_class(self):
|
||||||
# Can't add ManytoMany at creation time (Tags)
|
# Can't add ManytoMany at creation time (Tags)
|
||||||
if self.action == 'create':
|
if self.action == 'create':
|
||||||
return TaskCreateSerializer
|
return TaskCreateSerializer
|
||||||
return TaskGeneralSerializer
|
return TaskSerializer
|
||||||
|
|
||||||
|
|
||||||
class RecurrenceTaskViewSet(viewsets.ModelViewSet):
|
class RecurrenceTaskViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Todo.objects.all()
|
queryset = RecurrenceTask.objects.all()
|
||||||
serializer_class = TaskGeneralSerializer
|
serializer_class = RecurrenceTaskSerializer
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def get_serializer_class(self):
|
||||||
|
# Can't add ManytoMany at creation time (Tags)
|
||||||
|
if self.action == 'create':
|
||||||
|
return RecurrenceTaskCreateSerializer
|
||||||
|
return RecurrenceTaskSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class HabitTaskViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Habit.objects.all()
|
||||||
|
serializer_class = HabitTaskSerializer
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def get_serializer_class(self):
|
||||||
|
# Can't add ManytoMany at creation time (Tags)
|
||||||
|
if self.action == 'create':
|
||||||
|
return HabitTaskCreateSerializer
|
||||||
|
return HabitTaskSerializer
|
||||||
@ -3,12 +3,14 @@ from django.urls import path, include
|
|||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
|
|
||||||
from tasks.api import GoogleCalendarEventViewset
|
from tasks.api import GoogleCalendarEventViewset
|
||||||
from tasks.tasks.views import TodoViewSet
|
from tasks.tasks.views import TodoViewSet, RecurrenceTaskViewSet, HabitTaskViewSet
|
||||||
from tasks.misc.views import TagViewSet
|
from tasks.misc.views import TagViewSet
|
||||||
|
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register(r'todo', TodoViewSet)
|
router.register(r'todo', TodoViewSet)
|
||||||
|
router.register(r'daily', RecurrenceTaskViewSet)
|
||||||
|
router.register(r'habit', HabitTaskViewSet)
|
||||||
router.register(r'tags', TagViewSet)
|
router.register(r'tags', TagViewSet)
|
||||||
router.register(r'calendar-events', GoogleCalendarEventViewset, basename='calendar-events')
|
router.register(r'calendar-events', GoogleCalendarEventViewset, basename='calendar-events')
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,40 @@
|
|||||||
|
# Generated by Django 4.2.6 on 2023-11-13 18:15
|
||||||
|
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
import users.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0004_userstats'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userstats',
|
||||||
|
name='endurance',
|
||||||
|
field=models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userstats',
|
||||||
|
name='intelligence',
|
||||||
|
field=models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userstats',
|
||||||
|
name='luck',
|
||||||
|
field=models.IntegerField(default=users.models.random_luck, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(50)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userstats',
|
||||||
|
name='perception',
|
||||||
|
field=models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userstats',
|
||||||
|
name='strength',
|
||||||
|
field=models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
|
||||||
|
),
|
||||||
|
]
|
||||||
Loading…
Reference in New Issue
Block a user