Skip to content

Commit c79d671

Browse files
committed
feat(assignee): Extend features and fix bugs reagarding assignee and filtering by user
Issue: APPAI-54
1 parent e45264c commit c79d671

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

packages/gg_api_core/src/gg_api_core/tools/list_incidents.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ def _build_filter_info(params: "ListIncidentsParams") -> dict[str, Any]:
5656
filters["severity"] = [sev.value if hasattr(sev, "value") else sev for sev in params.severity]
5757
if params.validity:
5858
filters["validity"] = [v.value if hasattr(v, "value") else v for v in params.validity]
59+
if params.assignee_id:
60+
filters["assignee_id"] = params.assignee_id
61+
if params.assignee_email:
62+
filters["assignee_email"] = params.assignee_email
5963

6064
return filters
6165

@@ -67,6 +71,10 @@ def _build_suggestion(params: "ListIncidentsParams", incidents_count: int) -> st
6771
# Explain what's being filtered
6872
if params.mine:
6973
suggestions.append("Incidents are filtered to show only those assigned to current user")
74+
if params.assignee_id:
75+
suggestions.append(f"Incidents are filtered by assignee ID: {params.assignee_id}")
76+
if params.assignee_email:
77+
suggestions.append(f"Incidents are filtered by assignee email: {params.assignee_email}")
7078

7179
if params.exclude_tags:
7280
excluded_tag_names = [tag.name if hasattr(tag, "name") else tag for tag in params.exclude_tags]
@@ -129,6 +137,14 @@ class ListIncidentsParams(BaseModel):
129137
default=False,
130138
description="If True, fetch only incidents assigned to the current user. Set to False to get all incidents.",
131139
)
140+
assignee_id: int | None = Field(
141+
default=None,
142+
description="Filter by assignee member ID. Cannot be used together with 'mine'.",
143+
)
144+
assignee_email: str | None = Field(
145+
default=None,
146+
description="Filter by assignee email address. Cannot be used together with 'mine'.",
147+
)
132148
severity: list[str | IncidentSeverity] | None = Field(
133149
default=cast(list[str | IncidentSeverity], DEFAULT_SEVERITIES),
134150
description="Filter by severity (list of severity names)",
@@ -196,7 +212,18 @@ async def list_incidents(params: ListIncidentsParams) -> ListIncidentsResult | L
196212

197213
if params.mine:
198214
member = await client.get_current_member()
199-
api_params["assignee_email"] = member["email"]
215+
current_user_email = member["email"]
216+
if params.assignee_email and params.assignee_email != current_user_email:
217+
return ListIncidentsError(
218+
error=f"Conflict: 'mine=True' implies assignee_email='{current_user_email}', "
219+
f"but assignee_email='{params.assignee_email}' was explicitly provided. "
220+
"Please use either 'mine=True' or an explicit 'assignee_email', not both with different values."
221+
)
222+
api_params["assignee_email"] = current_user_email
223+
if params.assignee_id:
224+
api_params["assignee_id"] = params.assignee_id
225+
if params.assignee_email and not params.mine:
226+
api_params["assignee_email"] = params.assignee_email
200227

201228
if params.from_date:
202229
api_params["date_after"] = params.from_date

0 commit comments

Comments
 (0)