-
Notifications
You must be signed in to change notification settings - Fork 0
docs: Document Sprint 3 archive behavior and filter changes #140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
2658e6b
c2569d8
52bc637
7e9b870
dc61bfc
e8251cd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,45 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Changelog | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| All notable changes to IssueManager are documented in this file. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## [Unreleased] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Sprint 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #### Added | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Issue Filters & Search** (#116) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - `GET /api/v1/issues` now supports `page`, `pageSize`, `searchTerm`, `authorName`, `statusName`, and `categoryName` query parameters | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - IssuesPage component wires all filters to the API call for real-time filtering | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Search term performs regex-based matching on issue titles and descriptions (case-insensitive) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Category Archive API** (#120) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - `DELETE /api/v1/categories/{id}` endpoint for admin-only category archiving (soft-delete) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived categories are marked with `Archived=true` and `ArchivedBy` timestamp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived categories no longer appear in issue creation forms | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Preserves historical data while removing active usage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Status Archive API** (#121) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - `DELETE /api/v1/statuses/{id}` endpoint for admin-only status archiving (soft-delete) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived statuses are marked with `Archived=true` and `ArchivedBy` timestamp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived statuses no longer appear in issue workflow selectors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Preserves historical data while removing active usage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Category Archive UI** (#124) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Admin-only Archive button in CategoriesPage grid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Confirmation dialog to prevent accidental archiving | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived categories excluded from display | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Status Archive UI** (#123) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Admin-only Archive button in StatusesPage grid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Confirmation dialog to prevent accidental archiving | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived statuses excluded from display | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #### Documentation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Added comprehensive API documentation for issue filtering | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Added soft-delete behavior documentation for categories and statuses | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Added admin UI workflow documentation for archiving operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+19
to
+45
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Category Archive API** (#120) | |
| - `DELETE /api/v1/categories/{id}` endpoint for admin-only category archiving (soft-delete) | |
| - Archived categories are marked with `Archived=true` and `ArchivedBy` timestamp | |
| - Archived categories no longer appear in issue creation forms | |
| - Preserves historical data while removing active usage | |
| - **Status Archive API** (#121) | |
| - `DELETE /api/v1/statuses/{id}` endpoint for admin-only status archiving (soft-delete) | |
| - Archived statuses are marked with `Archived=true` and `ArchivedBy` timestamp | |
| - Archived statuses no longer appear in issue workflow selectors | |
| - Preserves historical data while removing active usage | |
| - **Category Archive UI** (#124) | |
| - Admin-only Archive button in CategoriesPage grid | |
| - Confirmation dialog to prevent accidental archiving | |
| - Archived categories excluded from display | |
| - **Status Archive UI** (#123) | |
| - Admin-only Archive button in StatusesPage grid | |
| - Confirmation dialog to prevent accidental archiving | |
| - Archived statuses excluded from display | |
| #### Documentation | |
| - Added comprehensive API documentation for issue filtering | |
| - Added soft-delete behavior documentation for categories and statuses | |
| - Added admin UI workflow documentation for archiving operations | |
| #### Documentation | |
| - Added comprehensive API documentation for issue filtering |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,62 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Categories API & UI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## Overview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Categories allow issues to be classified by type (e.g., "Bug", "Feature Request", "Documentation"). Admins can manage categories, including archiving (soft-deleting) them to prevent new usage while preserving historical data. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## DELETE /api/v1/categories/{id} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Archives (soft-deletes) a category. Only administrators can perform this action. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Authorization | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Required Role:** Administrator | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Response:** `204 No Content` on success or `403 Forbidden` if user lacks permissions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Behavior | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| When a category is archived: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The category document is marked with `Archived = true` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The `ArchivedBy` field is set to the current user's ID | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The `ArchivedAt` timestamp is recorded | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived categories **do not appear** in issue creation forms | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Existing issues with archived categories remain visible but cannot be reassigned to that category | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The category can be restored by a squad member with database access (manual intervention) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Example Request | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| DELETE /api/v1/categories/507f1f77bcf86cd799439011 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Authorization: Bearer {token} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Example Response | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| HTTP/1.1 204 No Content | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+5
to
+38
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Categories allow issues to be classified by type (e.g., "Bug", "Feature Request", "Documentation"). Admins can manage categories, including archiving (soft-deleting) them to prevent new usage while preserving historical data. | |
| ## DELETE /api/v1/categories/{id} | |
| Archives (soft-deletes) a category. Only administrators can perform this action. | |
| ### Authorization | |
| - **Required Role:** Administrator | |
| - **Response:** `204 No Content` on success or `403 Forbidden` if user lacks permissions | |
| ### Behavior | |
| When a category is archived: | |
| - The category document is marked with `Archived = true` | |
| - The `ArchivedBy` field is set to the current user's ID | |
| - The `ArchivedAt` timestamp is recorded | |
| - Archived categories **do not appear** in issue creation forms | |
| - Existing issues with archived categories remain visible but cannot be reassigned to that category | |
| - The category can be restored by a squad member with database access (manual intervention) | |
| ### Example Request | |
| ``` | |
| DELETE /api/v1/categories/507f1f77bcf86cd799439011 | |
| Authorization: Bearer {token} | |
| ``` | |
| ### Example Response | |
| ``` | |
| HTTP/1.1 204 No Content | |
| ``` | |
| Categories allow issues to be classified by type (e.g., "Bug", "Feature Request", "Documentation"). The current implementation supports archived category state to prevent new usage while preserving historical data. | |
| ### Current Implementation Notes | |
| - Category data includes archive-related fields `Archived` and `ArchivedBy` | |
| - Archived categories do not appear in issue creation forms | |
| - Existing issues with archived categories remain visible but cannot be reassigned to that category | |
| - This document does not describe a public `DELETE /api/v1/categories/{id}` endpoint because that endpoint is not currently implemented |
Copilot
AI
Apr 15, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The UI section doesn’t match the current implementation: CategoriesPage is guarded by [Authorize(Roles = "Admin")] (non-admins can’t view it at all), and the grid currently only supports add/edit—there is no Archive button/confirmation flow. Please adjust this page description to reflect the current UI behavior.
| The CategoriesPage component displays a grid of all active categories and provides admin controls. | |
| ### Features | |
| - **Category Grid:** Displays all active (non-archived) categories | |
| - **Archive Button:** Admin-only action to archive a category | |
| - **Confirmation Dialog:** Protects against accidental archiving | |
| - **Read-only for Non-Admins:** Non-administrators can view but cannot take actions | |
| ### Admin Workflow | |
| 1. Navigate to the Categories page | |
| 2. Locate the category to archive | |
| 3. Click the **Archive** button | |
| 4. Confirm the action in the dialog | |
| 5. The category is marked as archived and removed from all issue creation forms | |
| ### Implementation Notes | |
| - Archive confirmation uses a modal dialog to prevent accidental data loss | |
| - Archived categories are excluded from the display grid to reduce clutter | |
| - Only users with the Administrator role can see and use the Archive button | |
| The CategoriesPage component is available only to users in the | |
| Administrator role and displays a grid of categories with management actions. | |
| ### Features | |
| - **Admin-only Access:** The page is guarded by authorization and is not | |
| available to non-administrators | |
| - **Category Grid:** Displays categories for management in the admin UI | |
| - **Add Category:** Administrators can create new categories | |
| - **Edit Category:** Administrators can update existing categories | |
| ### Admin Workflow | |
| 1. Navigate to the Categories page as an administrator | |
| 2. Review the list of categories in the grid | |
| 3. Use the available controls to add a new category or edit an existing one | |
| ### Implementation Notes | |
| - `CategoriesPage` is protected with `[Authorize(Roles = "Admin")]` | |
| - Non-admin users cannot view this page | |
| - The current grid supports add and edit actions only | |
| - There is no Archive button or archive confirmation dialog in the current UI |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,81 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Issues API & UI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## Overview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| The Issues API provides endpoints to create, read, update, and list issues. The UI surfaces these capabilities through the IssuesPage component with integrated filtering and search. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## GET /api/v1/issues | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Retrieves a paginated list of issues with optional filtering and search. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Query Parameters | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | Parameter | Type | Required | Description | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |-----------|------|----------|-------------| | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | `page` | integer | No | Page number (0-indexed, default: 0) | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | `pageSize` | integer | No | Results per page (default: 10, max: 100) | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | `searchTerm` | string | No | Searches issue titles and descriptions (regex-based, case-insensitive) | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | `authorName` | string | No | Filter by issue author name (exact match, case-insensitive) | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | `statusName` | string | No | Filter by status name (e.g., "Open", "In Progress", "Closed") | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | `categoryName` | string | No | Filter by category name (e.g., "Bug", "Feature Request") | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+15
to
+20
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Example Requests | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| **List first 10 issues:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET /api/v1/issues?page=0&pageSize=10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| **Search for issues with "login" in title/description:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET /api/v1/issues?searchTerm=login&page=0&pageSize=10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| **Filter by author and status:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET /api/v1/issues?authorName=john&statusName=Open&page=0&pageSize=10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| **Combine search and filters:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GET /api/v1/issues?searchTerm=auth&categoryName=Bug&statusName=Open&page=0&pageSize=20 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Response | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns an `IssuesPage` object: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ```json | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "page": 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "pageSize": 10, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "totalCount": 42, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "items": [ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "id": "507f1f77bcf86cd799439011", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "title": "Login page is broken", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "description": "...", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "authorName": "john", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "statusName": "Open", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "categoryName": "Bug", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "createdAt": "2024-01-15T10:30:00Z", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| "updatedAt": "2024-01-20T14:22:00Z" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+46
to
+63
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns an `IssuesPage` object: | |
| ```json | |
| { | |
| "page": 0, | |
| "pageSize": 10, | |
| "totalCount": 42, | |
| "items": [ | |
| { | |
| "id": "507f1f77bcf86cd799439011", | |
| "title": "Login page is broken", | |
| "description": "...", | |
| "authorName": "john", | |
| "statusName": "Open", | |
| "categoryName": "Bug", | |
| "createdAt": "2024-01-15T10:30:00Z", | |
| "updatedAt": "2024-01-20T14:22:00Z" | |
| } | |
| ] | |
| Returns a `PaginatedResponse<IssueDto>` object: | |
| ```json | |
| { | |
| "Items": [ | |
| { | |
| "id": "507f1f77bcf86cd799439011", | |
| "title": "Login page is broken", | |
| "description": "...", | |
| "author": { | |
| "id": "507f191e810c19729de860ea", | |
| "name": "john" | |
| }, | |
| "category": { | |
| "id": "507f191e810c19729de860eb", | |
| "name": "Bug" | |
| }, | |
| "status": { | |
| "id": "507f191e810c19729de860ec", | |
| "name": "Open" | |
| }, | |
| "DateCreated": "2024-01-15T10:30:00Z", | |
| "DateModified": "2024-01-20T14:22:00Z" | |
| } | |
| ], | |
| "Total": 42, | |
| "Page": 0, | |
| "PageSize": 10 |
Copilot
AI
Apr 15, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This section claims all filters are wired to the API for real-time filtering, but the current IssuesPage.razor still calls IssueClient.GetAllAsync(page, 20) without passing _searchTerm, _statusFilter, or _categoryFilter, and the client/API don’t support status/category filtering. Please align this text with the current implementation (or wait to document it until the feature is actually shipped).
| - **Search:** Full-text search across issue titles and descriptions | |
| - **Filter by Author:** Select issues created by a specific author | |
| - **Filter by Status:** Select issues with a specific status | |
| - **Filter by Category:** Select issues with a specific category | |
| ### Implementation Notes | |
| All filter selections are wired directly to the API call, ensuring real-time filtering without page reload. Filters can be combined for precise issue lookup. | |
| - **Search and filters:** UI support for additional search and filtering is | |
| being documented separately from the currently wired API flow | |
| - **Status and category filtering:** Do not assume these are active in the | |
| current `IssuesPage` API request path until the feature is shipped | |
| ### Implementation Notes | |
| The current `IssuesPage` implementation retrieves paginated issue data. This | |
| documentation should not claim that all search and filter selections are | |
| passed directly to the API until that end-to-end behavior is implemented in | |
| the page, client, and API. |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,63 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Statuses API & UI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## Overview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Statuses track the lifecycle of issues (e.g., "Open", "In Progress", "Closed", "On Hold"). Admins can manage statuses, including archiving (soft-deleting) them to retire statuses while preserving historical data. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## DELETE /api/v1/statuses/{id} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Archives (soft-deletes) a status. Only administrators can perform this action. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Authorization | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Required Role:** Administrator | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Response:** `204 No Content` on success or `403 Forbidden` if user lacks permissions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Behavior | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| When a status is archived: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The status document is marked with `Archived = true` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The `ArchivedBy` field is set to the current user's ID | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The `ArchivedAt` timestamp is recorded | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived statuses **do not appear** in issue status selectors or workflows | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Existing issues with archived statuses remain visible but cannot be transitioned to that status | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - The status can be restored by a squad member with database access (manual intervention) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Example Request | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| DELETE /api/v1/statuses/507f1f77bcf86cd799439011 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Authorization: Bearer {token} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Example Response | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| HTTP/1.1 204 No Content | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## StatusesPage.razor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| The StatusesPage component displays a grid of all active statuses and provides admin controls. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Features | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Status Grid:** Displays all active (non-archived) statuses | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Archive Button:** Admin-only action to archive a status | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Confirmation Dialog:** Protects against accidental archiving | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - **Read-only for Non-Admins:** Non-administrators can view but cannot take actions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Admin Workflow | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1. Navigate to the Statuses page | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2. Locate the status to archive | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 3. Click the **Archive** button | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 4. Confirm the action in the dialog | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 5. The status is marked as archived and removed from all issue workflow selectors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Implementation Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archive confirmation uses a modal dialog to prevent accidental data loss | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Archived statuses are excluded from the display grid to reduce clutter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Only users with the Administrator role can see and use the Archive button | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Status archiving mirrors category archiving for consistency | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+41
to
+63
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| The StatusesPage component displays a grid of all active statuses and provides admin controls. | |
| ### Features | |
| - **Status Grid:** Displays all active (non-archived) statuses | |
| - **Archive Button:** Admin-only action to archive a status | |
| - **Confirmation Dialog:** Protects against accidental archiving | |
| - **Read-only for Non-Admins:** Non-administrators can view but cannot take actions | |
| ### Admin Workflow | |
| 1. Navigate to the Statuses page | |
| 2. Locate the status to archive | |
| 3. Click the **Archive** button | |
| 4. Confirm the action in the dialog | |
| 5. The status is marked as archived and removed from all issue workflow selectors | |
| ### Implementation Notes | |
| - Archive confirmation uses a modal dialog to prevent accidental data loss | |
| - Archived statuses are excluded from the display grid to reduce clutter | |
| - Only users with the Administrator role can see and use the Archive button | |
| - Status archiving mirrors category archiving for consistency | |
| The StatusesPage component is an admin-only page that displays a grid of statuses and supports creating and editing them. | |
| ### Features | |
| - **Status Grid:** Displays statuses available for management | |
| - **Add Status:** Administrators can create a new status | |
| - **Edit Status:** Administrators can update an existing status | |
| - **Admin-only Access:** Only users with the Administrator role can view and use this page | |
| ### Admin Workflow | |
| 1. Navigate to the Statuses page | |
| 2. Review the list of existing statuses | |
| 3. Use the page controls to add a new status or edit an existing one | |
| 4. Save the changes | |
| ### Implementation Notes | |
| - The page is protected by role-based authorization for administrators | |
| - The current grid supports add and edit operations | |
| - The page description should reflect the currently implemented UI behavior only |
Copilot
AI
Apr 15, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doc describes DELETE /api/v1/statuses/{id} as an admin-only archive endpoint and references ArchivedAt, but the current API has no DELETE endpoint for statuses, and the Status model/DTO only contains Archived and ArchivedBy (no archived timestamp field). Please update this section to match what’s implemented, or add the missing endpoint/fields before documenting them.
| Statuses track the lifecycle of issues (e.g., "Open", "In Progress", "Closed", "On Hold"). Admins can manage statuses, including archiving (soft-deleting) them to retire statuses while preserving historical data. | |
| ## DELETE /api/v1/statuses/{id} | |
| Archives (soft-deletes) a status. Only administrators can perform this action. | |
| ### Authorization | |
| - **Required Role:** Administrator | |
| - **Response:** `204 No Content` on success or `403 Forbidden` if user lacks permissions | |
| ### Behavior | |
| When a status is archived: | |
| - The status document is marked with `Archived = true` | |
| - The `ArchivedBy` field is set to the current user's ID | |
| - The `ArchivedAt` timestamp is recorded | |
| - Archived statuses **do not appear** in issue status selectors or workflows | |
| - Existing issues with archived statuses remain visible but cannot be transitioned to that status | |
| - The status can be restored by a squad member with database access (manual intervention) | |
| ### Example Request | |
| ``` | |
| DELETE /api/v1/statuses/507f1f77bcf86cd799439011 | |
| Authorization: Bearer {token} | |
| ``` | |
| ### Example Response | |
| ``` | |
| HTTP/1.1 204 No Content | |
| ``` | |
| ## StatusesPage.razor | |
| The StatusesPage component displays a grid of all active statuses and provides admin controls. | |
| ### Features | |
| - **Status Grid:** Displays all active (non-archived) statuses | |
| - **Archive Button:** Admin-only action to archive a status | |
| - **Confirmation Dialog:** Protects against accidental archiving | |
| - **Read-only for Non-Admins:** Non-administrators can view but cannot take actions | |
| ### Admin Workflow | |
| 1. Navigate to the Statuses page | |
| 2. Locate the status to archive | |
| 3. Click the **Archive** button | |
| 4. Confirm the action in the dialog | |
| 5. The status is marked as archived and removed from all issue workflow selectors | |
| ### Implementation Notes | |
| - Archive confirmation uses a modal dialog to prevent accidental data loss | |
| - Archived statuses are excluded from the display grid to reduce clutter | |
| - Only users with the Administrator role can see and use the Archive button | |
| - Status archiving mirrors category archiving for consistency | |
| Statuses track the lifecycle of issues (e.g., "Open", "In Progress", | |
| "Closed", "On Hold"). The current status model supports archived status | |
| metadata so retired statuses can be hidden from active selectors while | |
| preserving historical issue data. | |
| ## Archived status fields | |
| The current Status model/DTO includes the following archival fields: | |
| - `Archived`: Indicates whether the status has been archived. | |
| - `ArchivedBy`: Stores the ID of the user who archived the status. | |
| There is currently no documented public `DELETE /api/v1/statuses/{id}` | |
| endpoint for archiving statuses, and the model does not include an | |
| `ArchivedAt` timestamp field. | |
| Archived statuses may be excluded from issue status selectors and other | |
| active workflow UI, while existing issues that already reference those | |
| statuses remain available for historical reporting. | |
| ## StatusesPage.razor | |
| The StatusesPage component displays a grid of active statuses. | |
| ### Features | |
| - **Status Grid:** Displays active (non-archived) statuses | |
| - **Read-only for Non-Admins:** Non-administrators can view statuses but | |
| cannot perform administrative actions | |
| ### Display Behavior | |
| 1. Navigate to the Statuses page | |
| 2. View the list of active statuses | |
| 3. Archived statuses are excluded from the page to reduce clutter | |
| ### Implementation Notes | |
| - Archived statuses are excluded from the display grid to reduce clutter | |
| - Any archive action should only be documented when a corresponding | |
| implemented API endpoint is available | |
| - Status consumers should rely on the implemented archival fields | |
| `Archived` and `ArchivedBy` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sprint 3 changelog entry claims
GET /api/v1/issuessupportsstatusNameandcategoryNamefilters and that IssuesPage wires all filters to the API. In the current code, the API and client only supportsearchTermandauthorName, and the UI still callsGetAllAsync(page, 20)without passing any filters. Please correct the changelog to the behavior that is actually shipped.