|
1 | 1 | """Query parameter DTOs for list/retrieve endpoints.""" |
2 | 2 |
|
3 | | -from pydantic import BaseModel, ConfigDict, Field |
| 3 | +from pydantic import BaseModel, ConfigDict, Field, model_serializer |
4 | 4 |
|
5 | 5 |
|
6 | 6 | class BaseQueryParams(BaseModel): |
@@ -62,6 +62,48 @@ class WorkItemQueryParams(PaginatedQueryParams): |
62 | 62 |
|
63 | 63 | model_config = ConfigDict(extra="ignore", populate_by_name=True) |
64 | 64 |
|
| 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 | + |
65 | 107 |
|
66 | 108 | class RetrieveQueryParams(BaseQueryParams): |
67 | 109 | """Query parameters for retrieve endpoints.""" |
|
0 commit comments