feat: a public showcase of each project

A public endpoint sums up a public project for websites: epics with their
dates and progress, the latest releases with the notes of shipped ones,
the sprint under way and open tickets labelled good-first-issue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 19:13:56 +02:00
parent bec39da46d
commit feea58d0e8
11 changed files with 721 additions and 3 deletions

View File

@@ -917,6 +917,26 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/explore/projects/{project}/showcase": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* A public project's showcase (no token needed)
* @description For public websites: epics with their dates and progress, the latest releases (with the notes of shipped ones), the sprint under way and open tickets labelled good-first-issue. Paths point into the web app.
*/
get: operations["ExploreController_showcase"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/me/notifications": {
parameters: {
query?: never;
@@ -2115,6 +2135,63 @@ export interface components {
*/
markdown: string;
};
ShowcaseProjectDto: {
/** Format: uuid */
id: string;
/** @example WEB */
key: string;
name: string;
description: string | null;
};
ShowcaseSprintDto: {
name: string;
goal: string | null;
/** Format: date */
startDate: string;
/** Format: date */
endDate: string;
percent: number;
};
ShowcaseEpicDto: {
key: string;
title: string;
/** Format: date */
startDate: string | null;
/** Format: date */
dueDate: string | null;
percent: number;
done: boolean;
/**
* @description In the web app
* @example /p/WEB/issues/WEB-3
*/
path: string;
};
ShowcaseReleaseDto: {
name: string;
status: components["schemas"]["ReleaseStatus"];
targetDate: string | null;
releasedAt: string | null;
percent: number;
/** @description Shipped ones only */
notes: string | null;
};
ShowcaseIssueDto: {
key: string;
title: string;
/** @description A ticket type id */
type: string;
/** @example /p/WEB/issues/WEB-9 */
path: string;
};
ShowcaseDto: {
project: components["schemas"]["ShowcaseProjectDto"];
activeSprint: components["schemas"]["ShowcaseSprintDto"] | null;
roadmap: components["schemas"]["ShowcaseEpicDto"][];
releases: components["schemas"]["ShowcaseReleaseDto"][];
/** @description Open tickets labelled good-first-issue */
goodFirst: components["schemas"]["ShowcaseIssueDto"][];
};
Object: Record<string, never>;
/** @enum {string} */
NotificationKind: "ASSIGNED" | "STATUS_CHANGED" | "QA_FAILED" | "COMMENTED" | "MENTIONED" | "WATCHED" | "ADDED_TO_PROJECT" | "REMINDER";
@@ -6652,6 +6729,35 @@ export interface operations {
};
};
};
ExploreController_showcase: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Project id or key */
project: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ShowcaseDto"];
};
};
/** @description Not a public project */
404: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
NotificationsController_mine: {
parameters: {
query?: {