[MOBIL-787] chore: ipmplement workspace pages with pagination (#2446)

* fix: worksapce pages list

* chore: handled workspace pages is feature flagged
This commit is contained in:
guru_sainath
2025-02-11 13:34:11 +05:30
committed by GitHub
parent b2621df517
commit 8de830ef6e

View File

@@ -20,11 +20,55 @@ from plane.graphql.permissions.workspace import WorkspaceBasePermission
from plane.graphql.types.paginator import PaginatorResponse
from plane.graphql.utils.paginator import paginate
from plane.graphql.bgtasks.recent_visited_task import recent_visited_task
from plane.graphql.utils.feature_flag import validate_feature_flag
from plane.graphql.types.feature_flag import FeatureFlagsTypesEnum
# workspace level queries
@strawberry.type
class WorkspacePageQuery:
@strawberry.field(
extensions=[PermissionExtension(permissions=[WorkspaceBasePermission()])]
)
async def workspacePages(
self, info: Info, slug: str, cursor: Optional[str] = None
) -> PaginatorResponse[PageType]:
user = info.context.user
is_feature_flagged = await validate_feature_flag(
slug=slug,
user_id=str(user.id),
feature_key=FeatureFlagsTypesEnum.WORKSPACE_PAGES.value,
)
if not is_feature_flagged:
message = "Feature flag not enabled."
error_extensions = {"code": "FEATURE_FLAG_NOT_ENABLED", "statusCode": 400}
raise GraphQLError(message, extensions=error_extensions)
# Build subquery for UserFavorite
subquery = UserFavorite.objects.filter(
user=user,
entity_type="page",
entity_identifier=OuterRef("pk"),
workspace__slug=slug,
)
pages = await sync_to_async(list)(
Page.objects.filter(
workspace__slug=slug,
is_global=True,
archived_at__isnull=True,
parent__isnull=True,
)
.filter(Q(owned_by=user) | Q(access=0))
.select_related("workspace", "owned_by")
.annotate(is_favorite=Exists(subquery))
.order_by("-created_at")
)
return paginate(results_object=pages, cursor=cursor)
@strawberry.field(
extensions=[PermissionExtension(permissions=[WorkspaceBasePermission()])]
)