first commit
This commit is contained in:
108
libs/web/tracker/domain/src/lib/ports/gateways.ts
Normal file
108
libs/web/tracker/domain/src/lib/ports/gateways.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
import { Observable } from 'rxjs';
|
||||
import {
|
||||
Activity,
|
||||
BoardColumn,
|
||||
Comment,
|
||||
CommandResult,
|
||||
Issue,
|
||||
IssueSummary,
|
||||
Project,
|
||||
ProjectStats,
|
||||
Release,
|
||||
UserDirectoryEntry,
|
||||
} from '../models/models';
|
||||
import {
|
||||
BoardFilter,
|
||||
ChangeStatusInput,
|
||||
CreateIssueInput,
|
||||
CreateProjectInput,
|
||||
CreateReleaseInput,
|
||||
LinkIssuesInput,
|
||||
MemberInput,
|
||||
UpdateIssueInput,
|
||||
} from '../models/inputs';
|
||||
|
||||
/*
|
||||
* Outbound ports of the tracker. The application layer depends on these
|
||||
* abstract classes; the infrastructure layer implements them over GraphQL.
|
||||
*/
|
||||
|
||||
export abstract class ProjectsGateway {
|
||||
abstract myProjects(): Observable<Project[]>;
|
||||
abstract project(idOrKey: string): Observable<Project>;
|
||||
abstract stats(projectId: string): Observable<ProjectStats>;
|
||||
abstract create(input: CreateProjectInput): Observable<CommandResult>;
|
||||
abstract addMember(input: MemberInput): Observable<CommandResult>;
|
||||
abstract changeMemberRole(input: MemberInput): Observable<CommandResult>;
|
||||
abstract removeMember(
|
||||
projectId: string,
|
||||
userId: string,
|
||||
): Observable<CommandResult>;
|
||||
}
|
||||
|
||||
export abstract class IssuesGateway {
|
||||
abstract board(filter: BoardFilter): Observable<BoardColumn[]>;
|
||||
abstract issue(idOrKey: string): Observable<Issue>;
|
||||
abstract search(projectId: string, text: string): Observable<IssueSummary[]>;
|
||||
abstract create(input: CreateIssueInput): Observable<CommandResult>;
|
||||
abstract update(input: UpdateIssueInput): Observable<CommandResult>;
|
||||
abstract changeStatus(input: ChangeStatusInput): Observable<CommandResult>;
|
||||
abstract assign(
|
||||
issueId: string,
|
||||
assigneeId: string | null,
|
||||
): Observable<CommandResult>;
|
||||
abstract link(input: LinkIssuesInput): Observable<CommandResult>;
|
||||
abstract unlink(input: LinkIssuesInput): Observable<CommandResult>;
|
||||
abstract setRelease(
|
||||
issueId: string,
|
||||
releaseId: string | null,
|
||||
): Observable<CommandResult>;
|
||||
}
|
||||
|
||||
export abstract class CommentsGateway {
|
||||
abstract list(issueId: string): Observable<Comment[]>;
|
||||
abstract add(issueId: string, body: string): Observable<CommandResult>;
|
||||
abstract edit(commentId: string, body: string): Observable<CommandResult>;
|
||||
abstract remove(commentId: string): Observable<CommandResult>;
|
||||
}
|
||||
|
||||
export abstract class ReleasesGateway {
|
||||
abstract list(projectId: string): Observable<Release[]>;
|
||||
abstract create(input: CreateReleaseInput): Observable<CommandResult>;
|
||||
abstract publish(
|
||||
releaseId: string,
|
||||
force: boolean,
|
||||
): Observable<CommandResult>;
|
||||
abstract archive(releaseId: string): Observable<CommandResult>;
|
||||
}
|
||||
|
||||
export abstract class ActivityGateway {
|
||||
abstract list(projectId: string, issueId?: string): Observable<Activity[]>;
|
||||
}
|
||||
|
||||
export abstract class UsersGateway {
|
||||
abstract search(term: string): Observable<UserDirectoryEntry[]>;
|
||||
}
|
||||
|
||||
/** Realtime (GraphQL subscriptions over WebSocket). */
|
||||
export interface IssueChanged {
|
||||
action: string;
|
||||
version: number;
|
||||
actorId: string;
|
||||
issue: IssueSummary;
|
||||
}
|
||||
|
||||
export interface CommentChanged {
|
||||
action: string;
|
||||
commentId: string;
|
||||
comment: Comment | null;
|
||||
}
|
||||
|
||||
export abstract class TrackerRealtimeGateway {
|
||||
abstract issueChanges(projectId: string): Observable<IssueChanged>;
|
||||
abstract commentChanges(issueId: string): Observable<CommentChanged>;
|
||||
abstract activity(projectId: string): Observable<Activity>;
|
||||
abstract releaseChanges(projectId: string): Observable<Release>;
|
||||
abstract projectChanges(projectId: string): Observable<Project>;
|
||||
abstract myProjectsChanges(): Observable<Project>;
|
||||
}
|
||||
Reference in New Issue
Block a user