Skip to content

Commit 94cf652

Browse files
committed
feat: add filter fields to WorkItemQueryParams
Add assignee_id__in, state_id__in, state_group__in, priority__in, label_id__in, created_by_id__in, is_draft, and is_archived fields to WorkItemQueryParams to support server-side filtering of work items. Add model_serializer to convert list fields to comma-separated strings for compatibility with django-filters BaseInFilter.
1 parent 5edb2fc commit 94cf652

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

plane/models/query_params.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Query parameter DTOs for list/retrieve endpoints."""
22

3-
from pydantic import BaseModel, ConfigDict, Field
3+
from pydantic import BaseModel, ConfigDict, Field, model_serializer
44

55

66
class BaseQueryParams(BaseModel):
@@ -62,6 +62,48 @@ class WorkItemQueryParams(PaginatedQueryParams):
6262

6363
model_config = ConfigDict(extra="ignore", populate_by_name=True)
6464

65+
assignee_id__in: list[str] | None = Field(
66+
None,
67+
description="Filter by assignee UUIDs",
68+
)
69+
state_id__in: list[str] | None = Field(
70+
None,
71+
description="Filter by state UUIDs",
72+
)
73+
state_group__in: list[str] | None = Field(
74+
None,
75+
description="Filter by state groups (backlog, unstarted, started, completed, cancelled)",
76+
)
77+
priority__in: list[str] | None = Field(
78+
None,
79+
description="Filter by priority levels (urgent, high, medium, low, none)",
80+
)
81+
label_id__in: list[str] | None = Field(
82+
None,
83+
description="Filter by label UUIDs",
84+
)
85+
created_by_id__in: list[str] | None = Field(
86+
None,
87+
description="Filter by creator user UUIDs",
88+
)
89+
is_draft: bool | None = Field(
90+
None,
91+
description="Filter by draft status",
92+
)
93+
is_archived: bool | None = Field(
94+
None,
95+
description="Filter by archived status",
96+
)
97+
98+
@model_serializer(mode="wrap")
99+
def _serialize(self, handler): # type: ignore[no-untyped-def]
100+
"""Serialize list fields as comma-separated strings for django-filters."""
101+
data = handler(self)
102+
for key, value in data.items():
103+
if isinstance(value, list):
104+
data[key] = ",".join(str(v) for v in value)
105+
return data
106+
65107

66108
class RetrieveQueryParams(BaseQueryParams):
67109
"""Query parameters for retrieve endpoints."""

0 commit comments

Comments
 (0)