From 74b764d8d40cc797b85de590e15d74737c6d14d7 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Thu, 14 Sep 2023 19:23:33 +0530 Subject: [PATCH] fix: added pagination in workspace views --- apiserver/plane/api/views/view.py | 17 +++++++-- ..._alter_analyticview_created_by_and_more.py | 38 +++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 apiserver/plane/db/migrations/0045_alter_analyticview_created_by_and_more.py diff --git a/apiserver/plane/api/views/view.py b/apiserver/plane/api/views/view.py index 1543e7bee..95a483dd4 100644 --- a/apiserver/plane/api/views/view.py +++ b/apiserver/plane/api/views/view.py @@ -80,9 +80,20 @@ class WorkspaceViewIssuesEndpoint(BaseAPIView): ) ) ) - - serializer = IssueLiteSerializer(issues, many=True) - return Response(serializer.data, status=status.HTTP_200_OK) + if request.GET.get("per_page", False) and request.GET.get("cursor", False): + return self.paginate( + request=request, + queryset=issues, + on_results=lambda issues: IssueLiteSerializer( + issues, many=True + ).data, + ) + else: + return Response( + {"error": "per_page and cursor are required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + except WorkspaceView.DoesNotExist: return Response( {"error": "Workspace View does not exist"}, status=status.HTTP_404_NOT_FOUND diff --git a/apiserver/plane/db/migrations/0045_alter_analyticview_created_by_and_more.py b/apiserver/plane/db/migrations/0045_alter_analyticview_created_by_and_more.py new file mode 100644 index 000000000..b3f56a3de --- /dev/null +++ b/apiserver/plane/db/migrations/0045_alter_analyticview_created_by_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 4.2.3 on 2023-09-14 13:17 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('db', '0044_auto_20230913_0709'), + ] + + operations = [ + migrations.CreateModel( + name='WorkspaceView', + fields=[ + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), + ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), + ('name', models.CharField(max_length=255, verbose_name='View Name')), + ('description', models.TextField(blank=True, verbose_name='View Description')), + ('query', models.JSONField(verbose_name='View Query')), + ('access', models.PositiveSmallIntegerField(choices=[(0, 'Private'), (1, 'Public')], default=1)), + ('query_data', models.JSONField(default=dict)), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), + ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), + ('workspace', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workspace_views', to='db.workspace')), + ], + options={ + 'verbose_name': 'Workspace View', + 'verbose_name_plural': 'Workspace Views', + 'db_table': 'workspace_views', + 'ordering': ('-created_at',), + }, + ), + ]