diff --git a/apiserver/plane/api/serializers/page.py b/apiserver/plane/api/serializers/page.py index b4397df91..c4a803e7e 100644 --- a/apiserver/plane/api/serializers/page.py +++ b/apiserver/plane/api/serializers/page.py @@ -28,6 +28,7 @@ class PageSerializer(BaseSerializer): write_only=True, required=False, ) + blocks = PageBlockSerializer(read_only=True, many=True) class Meta: model = Page diff --git a/apiserver/plane/api/views/page.py b/apiserver/plane/api/views/page.py index 9d7431451..a903acd8a 100644 --- a/apiserver/plane/api/views/page.py +++ b/apiserver/plane/api/views/page.py @@ -1,9 +1,10 @@ # Python imports -from datetime import timedelta +from datetime import timedelta, datetime +from django.utils import timezone # Django imports from django.db import IntegrityError -from django.db.models import Exists, OuterRef, Q +from django.db.models import Exists, OuterRef, Q, Prefetch from django.utils import timezone # Third party imports @@ -59,6 +60,11 @@ class PageViewSet(BaseViewSet): .annotate(is_favorite=Exists(subquery)) .order_by(self.request.GET.get("order_by", "-created_at")) .prefetch_related("labels") + .prefetch_related( + Prefetch( + "blocks", queryset=PageBlock.objects.select_related("page", "issue") + ) + ) .distinct() ) @@ -234,10 +240,13 @@ class RecentPagesEndpoint(BaseAPIView): project_id=project_id, workspace__slug=slug, ) - pages = ( + current_time = timezone.now() + day_before = current_time - timedelta(days=1) + + yesterday_pages = ( ( Page.objects.filter( - updated_at__gte=(timezone.now() - timedelta(days=7)), + updated_at__date=day_before.date(), workspace__slug=slug, project_id=project_id, ) @@ -251,8 +260,37 @@ class RecentPagesEndpoint(BaseAPIView): .prefetch_related("labels") ) - serializer = PageSerializer(pages, many=True) - return Response(serializer.data, status=status.HTTP_200_OK) + earlier_this_week = ( + ( + Page.objects.filter( + updated_at__range=( + (timezone.now() - timedelta(days=1)), + (timezone.now() - timedelta(days=7)), + ), + workspace__slug=slug, + project_id=project_id, + ) + .filter(project__project_projectmember__member=request.user) + .annotate(is_favorite=Exists(subquery)) + .order_by("-updated_by") + ) + .select_related("project") + .select_related("workspace") + .select_related("owned_by") + .prefetch_related("labels") + ) + + yesterday_pages_serializer = PageSerializer(yesterday_pages, many=True) + earlier_this_week_serializer = PageBlockSerializer( + earlier_this_week, many=True + ) + return Response( + { + "yesterday": yesterday_pages_serializer.data, + "earlier_this_week": earlier_this_week_serializer.data, + }, + status=status.HTTP_200_OK, + ) except Exception as e: print(e) return Response(