feat: portfolio of all my projects
/cartera (and GraphQL portfolio, REST /api/me/portfolio, MCP get_portfolio) shows every active project I belong to (not archived, not as a guest) at a glance: open, overdue, blocked and stuck tickets, the sprint under way and whether it gets there, planned releases with their forecast, and the open epics with their progress. It reuses the dashboard's computations. A release with no tickets now reads «Sin tickets» instead of «Todo hecho», here and on the dashboard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { IssuePriority } from './enums';
|
||||
import { UserRef } from './models';
|
||||
import { Epic, UserRef } from './models';
|
||||
|
||||
/** A ticket the dashboard names, with the number that put it there. */
|
||||
export interface InsightIssue {
|
||||
@@ -141,3 +141,21 @@ export interface ProjectInsights {
|
||||
quality: Quality;
|
||||
fields: FieldBreakdown[];
|
||||
}
|
||||
|
||||
/** One of my active projects at a glance. */
|
||||
export interface PortfolioProject {
|
||||
projectId: string;
|
||||
key: string;
|
||||
name: string;
|
||||
isPublic: boolean;
|
||||
total: number;
|
||||
open: number;
|
||||
overdue: number;
|
||||
blocked: number;
|
||||
stuck: number;
|
||||
sprint: SprintPulse | null;
|
||||
releases: ReleaseForecast[];
|
||||
/** Open epics, nearest due date first. */
|
||||
epics: Epic[];
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ProjectInsights } from '../models/insights';
|
||||
import { PortfolioProject, ProjectInsights } from '../models/insights';
|
||||
import { Observable } from 'rxjs';
|
||||
import {
|
||||
Activity,
|
||||
@@ -67,6 +67,8 @@ export abstract class ProjectsGateway {
|
||||
abstract publicProjects(): Observable<Project[]>;
|
||||
abstract project(idOrKey: string): Observable<Project>;
|
||||
abstract stats(projectId: string): Observable<ProjectStats>;
|
||||
/** My active projects at a glance. */
|
||||
abstract portfolio(): Observable<PortfolioProject[]>;
|
||||
/** The dashboard; with `since`, also what changed after it. */
|
||||
abstract insights(
|
||||
projectId: string,
|
||||
|
||||
Reference in New Issue
Block a user