feat: an ordered backlog
A Backlog tab lists the tickets still to start in the order the team will take them; drag them, or use the arrows, to reorder. Moving a ticket only rewrites that ticket's rank, read from the event store, and board columns follow the same order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2188,6 +2188,15 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "sort",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "RECENT (default): last updated first. RANK: backlog order.",
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/IssueSort"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "search",
|
||||
"required": false,
|
||||
@@ -3098,6 +3107,118 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/issues/{issue}/rank": {
|
||||
"put": {
|
||||
"description": "Between the ticket that ends up above it and the one below (either may be left out for the top or the bottom). Board columns follow the same order.",
|
||||
"operationId": "IssuesController_rank",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "issue",
|
||||
"required": true,
|
||||
"in": "path",
|
||||
"description": "Ticket id or key",
|
||||
"schema": {
|
||||
"example": "WEB-12",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/RankIssueDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/CommandResultDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid input",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ApiErrorDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Missing or rejected Pireon token",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ApiErrorDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Not a member of the project (or not allowed)",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ApiErrorDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Not found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ApiErrorDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"409": {
|
||||
"description": "Someone changed it at the same time: retry",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ApiErrorDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"422": {
|
||||
"description": "Business rule (e.g. a transition the workflow forbids)",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ApiErrorDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"pireon-oauth": []
|
||||
},
|
||||
{
|
||||
"pireon": []
|
||||
}
|
||||
],
|
||||
"summary": "Move the ticket in the backlog",
|
||||
"tags": [
|
||||
"Issues"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/issues/{issue}/checklist": {
|
||||
"post": {
|
||||
"operationId": "IssuesController_addChecklistItem",
|
||||
@@ -6940,6 +7061,10 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"rank": {
|
||||
"type": "string",
|
||||
"description": "Place in the backlog and its board column (ascending, as text)"
|
||||
},
|
||||
"checklist": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -6986,6 +7111,7 @@
|
||||
"attachments",
|
||||
"watchers",
|
||||
"parent",
|
||||
"rank",
|
||||
"checklist",
|
||||
"commentCount",
|
||||
"createdAt",
|
||||
@@ -7421,6 +7547,13 @@
|
||||
"total"
|
||||
]
|
||||
},
|
||||
"IssueSort": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"RECENT",
|
||||
"RANK"
|
||||
]
|
||||
},
|
||||
"CreateIssueDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -7656,6 +7789,23 @@
|
||||
"parent"
|
||||
]
|
||||
},
|
||||
"RankIssueDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"above": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"example": "WEB-4",
|
||||
"description": "The ticket that ends up right above (id or key; null: the top)"
|
||||
},
|
||||
"below": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"example": "WEB-9",
|
||||
"description": "The ticket that ends up right below (id or key; null: the bottom)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ChecklistItemBodyDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
Reference in New Issue
Block a user