Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions apps/api/plane/api/serializers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,8 @@
from .invite import WorkspaceInviteSerializer
from .member import ProjectMemberSerializer
from .sticky import StickySerializer
from .page import (
PageSerializer,
PageCreateSerializer,
PageUpdateSerializer,
)
73 changes: 73 additions & 0 deletions apps/api/plane/api/serializers/page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Copyright (c) 2023-present Plane Software, Inc. and contributors
# SPDX-License-Identifier: AGPL-3.0-only
# See the LICENSE file for details.

# Third party imports
from rest_framework import serializers

# Module imports
from .base import BaseSerializer
from plane.db.models import Page


class PageCreateSerializer(BaseSerializer):
"""Serializer for creating pages via the v1 API."""

class Meta:
model = Page
fields = [
"name",
"description_html",
"color",
"access",
"parent",
"external_source",
"external_id",
]
read_only_fields = [
"id",
"workspace",
"owned_by",
"created_by",
"updated_by",
"created_at",
"updated_at",
"deleted_at",
]


class PageUpdateSerializer(PageCreateSerializer):
"""
Serializer for updating pages via the v1 API.

Extends PageCreateSerializer for partial update support.
"""

class Meta(PageCreateSerializer.Meta):
pass


class PageSerializer(BaseSerializer):
"""
Full read serializer for pages in the v1 API.

Returns all page fields including description_html, lock status,
archive state, and associated label/project IDs.
"""

label_ids = serializers.ListField(child=serializers.UUIDField(), read_only=True)
project_ids = serializers.ListField(child=serializers.UUIDField(), read_only=True)

class Meta:
model = Page
fields = "__all__"
read_only_fields = [
"id",
"workspace",
"owned_by",
"created_by",
"updated_by",
"created_at",
"updated_at",
"deleted_at",
]
2 changes: 2 additions & 0 deletions apps/api/plane/api/urls/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from .work_item import urlpatterns as work_item_patterns
from .invite import urlpatterns as invite_patterns
from .sticky import urlpatterns as sticky_patterns
from .page import urlpatterns as page_patterns

urlpatterns = [
*asset_patterns,
Expand All @@ -22,6 +23,7 @@
*label_patterns,
*member_patterns,
*module_patterns,
*page_patterns,
*project_patterns,
*state_patterns,
*user_patterns,
Expand Down
39 changes: 39 additions & 0 deletions apps/api/plane/api/urls/page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) 2023-present Plane Software, Inc. and contributors
# SPDX-License-Identifier: AGPL-3.0-only
# See the LICENSE file for details.

from django.urls import path

from plane.api.views.page import (
PageListCreateAPIEndpoint,
PageDetailAPIEndpoint,
PageArchiveUnarchiveAPIEndpoint,
)

urlpatterns = [
path(
"workspaces/<str:slug>/projects/<uuid:project_id>/pages/",
PageListCreateAPIEndpoint.as_view(http_method_names=["get", "post"]),
name="pages",
),
path(
"workspaces/<str:slug>/projects/<uuid:project_id>/pages/<uuid:pk>/",
PageDetailAPIEndpoint.as_view(http_method_names=["get", "patch", "delete"]),
name="pages",
),
path(
"workspaces/<str:slug>/projects/<uuid:project_id>/pages/<uuid:page_id>/archive/",
PageArchiveUnarchiveAPIEndpoint.as_view(http_method_names=["post"]),
name="page-archive",
),
path(
"workspaces/<str:slug>/projects/<uuid:project_id>/archived-pages/",
PageArchiveUnarchiveAPIEndpoint.as_view(http_method_names=["get"]),
name="page-archive-list",
),
path(
"workspaces/<str:slug>/projects/<uuid:project_id>/archived-pages/<uuid:page_id>/unarchive/",
PageArchiveUnarchiveAPIEndpoint.as_view(http_method_names=["delete"]),
name="page-unarchive",
),
]
6 changes: 6 additions & 0 deletions apps/api/plane/api/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,9 @@
from .invite import WorkspaceInvitationsViewset

from .sticky import StickyViewSet

from .page import (
PageListCreateAPIEndpoint,
PageDetailAPIEndpoint,
PageArchiveUnarchiveAPIEndpoint,
)
Loading