From 6f47b107495309504d48a4ffdd69df7bd9849518 Mon Sep 17 00:00:00 2001 From: sosokker Date: Mon, 6 Nov 2023 23:58:40 +0700 Subject: [PATCH] Rename Serializer and Skip Reccurence task mapping for now --- backend/tasks/api.py | 20 ++++++++------- backend/tasks/serializers.py | 32 +++++++++++++++++++++--- backend/tasks/tests/test_deserializer.py | 6 ++--- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/backend/tasks/api.py b/backend/tasks/api.py index 9f5d95e..5352f9a 100644 --- a/backend/tasks/api.py +++ b/backend/tasks/api.py @@ -7,8 +7,8 @@ from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from tasks.utils import get_service -from tasks.models import Todo -from tasks.serializers import TaskUpdateSerializer +from tasks.models import Todo, RecurrenceTask +from tasks.serializers import TodoUpdateSerializer, RecurrenceTaskUpdateSerializer class GoogleCalendarEventViewset(viewsets.ViewSet): @@ -17,28 +17,30 @@ class GoogleCalendarEventViewset(viewsets.ViewSet): def __init__(self, *args, **kwargs): super().__init__() self.current_time = datetime.now(tz=timezone.utc).isoformat() - self.event_fields = 'items(id,summary,description,created,updated,start,end)' + self.event_fields = 'items(id,summary,description,created,recurringEventId,updated,start,end)' def _validate_serializer(self, serializer): if serializer.is_valid(): serializer.save() - return Response("Task Sync Successfully", status=200) + return Response("Validate Successfully", status=200) return Response(serializer.errors, status=400) def post(self, request): service = get_service(request) events = service.events().list(calendarId='primary', fields=self.event_fields).execute() for event in events.get('items', []): + if event.get('recurringEventId'): + continue try: task = Todo.objects.get(google_calendar_id=event['id']) - serializer = TaskUpdateSerializer(instance=task, data=event) + serializer = TodoUpdateSerializer(instance=task, data=event) return self._validate_serializer(serializer) except Todo.DoesNotExist: - serializer = TaskUpdateSerializer(data=event, user=request.user) + serializer = TodoUpdateSerializer(data=event, user=request.user) return self._validate_serializer(serializer) def list(self, request, days=7): - max_time = (datetime.now(tz=timezone.utc) + timedelta(days=3)).isoformat() + max_time = (datetime.now(tz=timezone.utc) + timedelta(days=days)).isoformat() service = get_service(request) events = [] @@ -49,11 +51,11 @@ class GoogleCalendarEventViewset(viewsets.ViewSet): calendarId='primary', timeMin=self.current_time, timeMax=max_time, - maxResults=20, + maxResults=200, singleEvents=True, orderBy='startTime', pageToken=next_page_token, - fields='items(id,summary,description,created,updated,start,end)', + fields='items(id,summary,description,created,recurringEventId,updated,start,end)', ) page_results = query.execute() diff --git a/backend/tasks/serializers.py b/backend/tasks/serializers.py index 9204c1f..ed02300 100644 --- a/backend/tasks/serializers.py +++ b/backend/tasks/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers from django.utils.dateparse import parse_datetime -from .models import Todo +from .models import Todo, RecurrenceTask class GoogleCalendarEventSerializer(serializers.Serializer): @@ -10,7 +10,7 @@ class GoogleCalendarEventSerializer(serializers.Serializer): description = serializers.CharField(required=False) -class TaskUpdateSerializer(serializers.ModelSerializer): +class TodoUpdateSerializer(serializers.ModelSerializer): id = serializers.CharField(source="google_calendar_id") summary = serializers.CharField(source="title") description = serializers.CharField(source="notes", required=False) @@ -26,10 +26,36 @@ class TaskUpdateSerializer(serializers.ModelSerializer): def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) - super(TaskUpdateSerializer, self).__init__(*args, **kwargs) + super(TodoUpdateSerializer, self).__init__(*args, **kwargs) def create(self, validated_data): validated_data['user'] = self.user task = Todo.objects.create(**validated_data) + return task + + +class RecurrenceTaskUpdateSerializer(serializers.ModelSerializer): + id = serializers.CharField(source="google_calendar_id") + summary = serializers.CharField(source="title") + description = serializers.CharField(source="notes", required=False) + created = serializers.DateTimeField(source="creation_date") + updated = serializers.DateTimeField(source="last_update") + recurrence = serializers.DateTimeField(source="recurrence_rule") + start_datetime = serializers.DateTimeField(source="start_event", required=False) + end_datetime = serializers.DateTimeField(source="end_event", required=False) + + + class Meta: + model = RecurrenceTask + fields = ('id', 'summary', 'description', 'created', 'updated', 'recurrence', 'start_datetime', 'end_datetime') + + def __init__(self, *args, **kwargs): + self.user = kwargs.pop('user', None) + super(RecurrenceTaskUpdateSerializer, self).__init__(*args, **kwargs) + + def create(self, validated_data): + validated_data['user'] = self.user + task = RecurrenceTask.objects.create(**validated_data) + return task \ No newline at end of file diff --git a/backend/tasks/tests/test_deserializer.py b/backend/tasks/tests/test_deserializer.py index 492e3d2..306185c 100644 --- a/backend/tasks/tests/test_deserializer.py +++ b/backend/tasks/tests/test_deserializer.py @@ -5,7 +5,7 @@ from django.test import TestCase from django.utils import timezone from tasks.tests.utils import create_test_user, login_user -from tasks.serializers import TaskUpdateSerializer +from tasks.serializers import TodoUpdateSerializer from tasks.models import Todo class TaskUpdateSerializerTest(TestCase): @@ -25,7 +25,7 @@ class TaskUpdateSerializerTest(TestCase): 'end_datetie': self.end_time, } - serializer = TaskUpdateSerializer(data=data, user=self.user) + serializer = TodoUpdateSerializer(data=data, user=self.user) self.assertTrue(serializer.is_valid()) serializer.is_valid() task = serializer.save() @@ -44,7 +44,7 @@ class TaskUpdateSerializerTest(TestCase): 'end_datetie': self.end_time, } - serializer = TaskUpdateSerializer(instance=task, data=data) + serializer = TodoUpdateSerializer(instance=task, data=data) self.assertTrue(serializer.is_valid()) updated_task = serializer.save()