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:
2026-10-15 18:27:46 +02:00
parent 8bf7d47b2e
commit affce615a7
35 changed files with 1603 additions and 80 deletions

View File

@@ -1140,3 +1140,24 @@ export class ProjectInsightsDto {
})
fields!: FieldBreakdownDto[];
}
export class PortfolioProjectDto {
@ApiProperty({ format: 'uuid' }) projectId!: string;
@ApiProperty({ example: 'WEB' }) key!: string;
@ApiProperty() name!: string;
@ApiProperty() isPublic!: boolean;
@ApiProperty() total!: number;
@ApiProperty() open!: number;
@ApiProperty() overdue!: number;
@ApiProperty() blocked!: number;
@ApiProperty() stuck!: number;
@ApiProperty({ type: SprintPulseDto, nullable: true })
sprint!: SprintPulseDto | null;
@ApiProperty({ type: [ReleaseForecastDto] }) releases!: ReleaseForecastDto[];
@ApiProperty({
type: [EpicDto],
description: 'Open epics, nearest due date first (six at most)',
})
epics!: EpicDto[];
@ApiProperty() updatedAt!: string;
}