first commit
This commit is contained in:
131
libs/web/tracker/domain/src/lib/models/models.ts
Normal file
131
libs/web/tracker/domain/src/lib/models/models.ts
Normal file
@@ -0,0 +1,131 @@
|
||||
import {
|
||||
IssueArea,
|
||||
IssueLinkType,
|
||||
IssuePriority,
|
||||
IssueStatus,
|
||||
IssueType,
|
||||
ProjectRole,
|
||||
ReleaseStatus,
|
||||
} from './enums';
|
||||
|
||||
export interface UserRef {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface ProjectMember {
|
||||
user: UserRef;
|
||||
role: ProjectRole;
|
||||
}
|
||||
|
||||
export interface Project {
|
||||
id: string;
|
||||
key: string;
|
||||
name: string;
|
||||
description: string | null;
|
||||
owner: UserRef;
|
||||
members: ProjectMember[];
|
||||
updatedAt: string;
|
||||
version: number;
|
||||
}
|
||||
|
||||
export interface IssueLink {
|
||||
type: IssueLinkType;
|
||||
/** OUTWARD: this issue → other. INWARD: other → this issue. */
|
||||
direction: 'OUTWARD' | 'INWARD';
|
||||
issueId: string;
|
||||
issueKey: string;
|
||||
}
|
||||
|
||||
/** What boards and lists show. */
|
||||
export interface IssueSummary {
|
||||
id: string;
|
||||
projectId: string;
|
||||
key: string;
|
||||
type: IssueType;
|
||||
area: IssueArea | null;
|
||||
title: string;
|
||||
status: IssueStatus;
|
||||
priority: IssuePriority;
|
||||
assignee: UserRef | null;
|
||||
release: { id: string; name: string } | null;
|
||||
labels: string[];
|
||||
commentCount: number;
|
||||
updatedAt: string;
|
||||
version: number;
|
||||
}
|
||||
|
||||
export interface Issue extends IssueSummary {
|
||||
description: string | null;
|
||||
reporter: UserRef;
|
||||
figmaUrl: string | null;
|
||||
storyPoints: number | null;
|
||||
dueDate: string | null;
|
||||
links: IssueLink[];
|
||||
allowedTransitions: IssueStatus[];
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
export interface Comment {
|
||||
id: string;
|
||||
issueId: string;
|
||||
author: UserRef;
|
||||
body: string;
|
||||
createdAt: string;
|
||||
editedAt: string | null;
|
||||
}
|
||||
|
||||
export interface Release {
|
||||
id: string;
|
||||
projectId: string;
|
||||
name: string;
|
||||
description: string | null;
|
||||
targetDate: string | null;
|
||||
status: ReleaseStatus;
|
||||
releasedAt: string | null;
|
||||
progress: { total: number; finished: number; percent: number };
|
||||
}
|
||||
|
||||
export interface Activity {
|
||||
id: string;
|
||||
type: string;
|
||||
issueId: string | null;
|
||||
issueKey: string | null;
|
||||
actor: UserRef;
|
||||
summary: string;
|
||||
occurredAt: string;
|
||||
}
|
||||
|
||||
export interface CountBy<T = string> {
|
||||
key: T;
|
||||
count: number;
|
||||
}
|
||||
|
||||
export interface ProjectStats {
|
||||
total: number;
|
||||
open: number;
|
||||
byStatus: CountBy<IssueStatus>[];
|
||||
byType: CountBy[];
|
||||
byPriority: CountBy[];
|
||||
byArea: CountBy[];
|
||||
byAssignee: { user: UserRef | null; count: number }[];
|
||||
}
|
||||
|
||||
export interface BoardColumn {
|
||||
status: IssueStatus;
|
||||
issues: IssueSummary[];
|
||||
total: number;
|
||||
}
|
||||
|
||||
export interface UserDirectoryEntry {
|
||||
id: string;
|
||||
name: string;
|
||||
email: string;
|
||||
}
|
||||
|
||||
/** Ack of a command: the read model catches up asynchronously. */
|
||||
export interface CommandResult {
|
||||
id: string;
|
||||
key?: string | null;
|
||||
version: number;
|
||||
}
|
||||
Reference in New Issue
Block a user