feat: a home page with life
Greeting and summary of the day, the coming week, the latest across my projects, who is online now, the week in numbers (mine and the team's, with a streak), sprints under way, «Retomar», project cards with their activity, what to pick up when nothing is mine and first steps for newcomers. REST (GET /api/me/home), GraphQL (myHome) and MCP (get_my_week). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2185,6 +2185,77 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/me/home": {
|
||||
"get": {
|
||||
"description": "Agenda of my week, latest activity of my projects, the week in numbers (the team and me), sprints under way, project cards, suggestions, first steps and who is on what now.",
|
||||
"operationId": "IssuesController_home",
|
||||
"parameters": [],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/HomeDto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"pireon-oauth": []
|
||||
},
|
||||
{
|
||||
"pireon": []
|
||||
}
|
||||
],
|
||||
"summary": "The home page beyond my work",
|
||||
"tags": [
|
||||
"Issues"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/me/portfolio": {
|
||||
"get": {
|
||||
"description": "Every active project I am a member of (not archived, not as a guest): open and at-risk tickets, the sprint under way, release forecasts and open epics.",
|
||||
@@ -13490,6 +13561,300 @@
|
||||
"role"
|
||||
]
|
||||
},
|
||||
"AgendaItemDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"day": {
|
||||
"type": "string",
|
||||
"format": "date"
|
||||
},
|
||||
"kind": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ISSUE",
|
||||
"SPRINT_END",
|
||||
"RELEASE"
|
||||
]
|
||||
},
|
||||
"projectKey": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"issueKey": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"day",
|
||||
"kind",
|
||||
"projectKey",
|
||||
"title",
|
||||
"issueKey"
|
||||
]
|
||||
},
|
||||
"TeamWeekDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"perDay": {
|
||||
"description": "Finished per day, last 14, oldest first",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"thisWeek": {
|
||||
"type": "number"
|
||||
},
|
||||
"lastWeek": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"perDay",
|
||||
"thisWeek",
|
||||
"lastWeek"
|
||||
]
|
||||
},
|
||||
"MyWeekDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"thisWeek": {
|
||||
"type": "number"
|
||||
},
|
||||
"lastWeek": {
|
||||
"type": "number"
|
||||
},
|
||||
"streak": {
|
||||
"type": "number",
|
||||
"description": "Days in a row with something finished"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"thisWeek",
|
||||
"lastWeek",
|
||||
"streak"
|
||||
]
|
||||
},
|
||||
"HomeSprintDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"projectKey": {
|
||||
"type": "string"
|
||||
},
|
||||
"projectName": {
|
||||
"type": "string"
|
||||
},
|
||||
"sprint": {
|
||||
"$ref": "#/components/schemas/SprintPulseDto"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projectKey",
|
||||
"projectName",
|
||||
"sprint"
|
||||
]
|
||||
},
|
||||
"HomeSprintBriefDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"percent": {
|
||||
"type": "number"
|
||||
},
|
||||
"behind": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"name",
|
||||
"percent",
|
||||
"behind"
|
||||
]
|
||||
},
|
||||
"HomeProjectDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"projectId": {
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
},
|
||||
"open": {
|
||||
"type": "number"
|
||||
},
|
||||
"overdue": {
|
||||
"type": "number"
|
||||
},
|
||||
"activity": {
|
||||
"description": "Activity per day, last 14, oldest first",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"sprint": {
|
||||
"nullable": true,
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/HomeSprintBriefDto"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projectId",
|
||||
"open",
|
||||
"overdue",
|
||||
"activity",
|
||||
"sprint"
|
||||
]
|
||||
},
|
||||
"SuggestionDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"kind": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"UNASSIGNED",
|
||||
"PROPOSALS",
|
||||
"QA_WAITING"
|
||||
]
|
||||
},
|
||||
"projectKey": {
|
||||
"type": "string"
|
||||
},
|
||||
"count": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"projectKey",
|
||||
"count"
|
||||
]
|
||||
},
|
||||
"FirstStepsDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"invited": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"ticket": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"calendar": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"project",
|
||||
"invited",
|
||||
"ticket",
|
||||
"calendar"
|
||||
]
|
||||
},
|
||||
"OnlineDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"user": {
|
||||
"$ref": "#/components/schemas/UserRefDto"
|
||||
},
|
||||
"projectKey": {
|
||||
"type": "string"
|
||||
},
|
||||
"issueKey": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"issueTitle": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"editing": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"at": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"user",
|
||||
"projectKey",
|
||||
"issueKey",
|
||||
"issueTitle",
|
||||
"editing",
|
||||
"at"
|
||||
]
|
||||
},
|
||||
"HomeDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"agenda": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/AgendaItemDto"
|
||||
}
|
||||
},
|
||||
"activity": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/ActivityDto"
|
||||
}
|
||||
},
|
||||
"team": {
|
||||
"$ref": "#/components/schemas/TeamWeekDto"
|
||||
},
|
||||
"me": {
|
||||
"$ref": "#/components/schemas/MyWeekDto"
|
||||
},
|
||||
"sprints": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/HomeSprintDto"
|
||||
}
|
||||
},
|
||||
"projects": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/HomeProjectDto"
|
||||
}
|
||||
},
|
||||
"suggestions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/SuggestionDto"
|
||||
}
|
||||
},
|
||||
"firstSteps": {
|
||||
"$ref": "#/components/schemas/FirstStepsDto"
|
||||
},
|
||||
"online": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/OnlineDto"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"agenda",
|
||||
"activity",
|
||||
"team",
|
||||
"me",
|
||||
"sprints",
|
||||
"projects",
|
||||
"suggestions",
|
||||
"firstSteps",
|
||||
"online"
|
||||
]
|
||||
},
|
||||
"ChildProgressDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
Reference in New Issue
Block a user