first commit
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
import { inject, Injectable } from '@angular/core';
|
||||
import {
|
||||
BoardColumn,
|
||||
BoardFilter,
|
||||
ChangeStatusInput,
|
||||
CommandResult,
|
||||
CreateIssueInput,
|
||||
Issue,
|
||||
IssuesGateway,
|
||||
IssueSummary,
|
||||
LinkIssuesInput,
|
||||
UpdateIssueInput,
|
||||
} from '@task-stream/web/tracker/domain';
|
||||
import { map, Observable } from 'rxjs';
|
||||
import {
|
||||
AssignIssueDocument,
|
||||
BoardDocument,
|
||||
ChangeIssueStatusDocument,
|
||||
CreateIssueDocument,
|
||||
IssueDocument,
|
||||
LinkIssuesDocument,
|
||||
SearchIssuesDocument,
|
||||
SetIssueReleaseDocument,
|
||||
UnlinkIssuesDocument,
|
||||
UpdateIssueDocument,
|
||||
} from '../graphql/generated';
|
||||
import { GraphqlOperations } from './graphql-operations';
|
||||
import { toCommandResult, toIssue, toIssueSummary } from './mappers';
|
||||
|
||||
@Injectable()
|
||||
export class GraphqlIssuesGateway extends IssuesGateway {
|
||||
private readonly gql = inject(GraphqlOperations);
|
||||
|
||||
board(filter: BoardFilter): Observable<BoardColumn[]> {
|
||||
return this.gql
|
||||
.query(BoardDocument, {
|
||||
idOrKey: filter.projectId,
|
||||
releaseId: filter.releaseId ?? null,
|
||||
assigneeId: filter.assigneeId ?? null,
|
||||
area: filter.area ?? null,
|
||||
})
|
||||
.pipe(
|
||||
map((d) =>
|
||||
d.project.board.map((column) => ({
|
||||
status: column.status as BoardColumn['status'],
|
||||
total: column.total,
|
||||
issues: column.issues.map(toIssueSummary),
|
||||
})),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
issue(idOrKey: string): Observable<Issue> {
|
||||
return this.gql
|
||||
.query(IssueDocument, { idOrKey })
|
||||
.pipe(map((d) => toIssue(d.issue)));
|
||||
}
|
||||
|
||||
search(projectId: string, text: string): Observable<IssueSummary[]> {
|
||||
return this.gql
|
||||
.query(SearchIssuesDocument, { filter: { projectId, search: text } })
|
||||
.pipe(map((d) => d.issues.items.map(toIssueSummary)));
|
||||
}
|
||||
|
||||
create(input: CreateIssueInput): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(CreateIssueDocument, { input: input as never })
|
||||
.pipe(map((d) => toCommandResult(d.createIssue)));
|
||||
}
|
||||
|
||||
update(input: UpdateIssueInput): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(UpdateIssueDocument, { input: input as never })
|
||||
.pipe(map((d) => toCommandResult(d.updateIssue)));
|
||||
}
|
||||
|
||||
changeStatus(input: ChangeStatusInput): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(ChangeIssueStatusDocument, { input: input as never })
|
||||
.pipe(map((d) => toCommandResult(d.changeIssueStatus)));
|
||||
}
|
||||
|
||||
assign(
|
||||
issueId: string,
|
||||
assigneeId: string | null,
|
||||
): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(AssignIssueDocument, { issueId, assigneeId })
|
||||
.pipe(map((d) => toCommandResult(d.assignIssue)));
|
||||
}
|
||||
|
||||
link(input: LinkIssuesInput): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(LinkIssuesDocument, { input: input as never })
|
||||
.pipe(map((d) => toCommandResult(d.linkIssues)));
|
||||
}
|
||||
|
||||
unlink(input: LinkIssuesInput): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(UnlinkIssuesDocument, { input: input as never })
|
||||
.pipe(map((d) => toCommandResult(d.unlinkIssues)));
|
||||
}
|
||||
|
||||
setRelease(
|
||||
issueId: string,
|
||||
releaseId: string | null,
|
||||
): Observable<CommandResult> {
|
||||
return this.gql
|
||||
.mutate(SetIssueReleaseDocument, { issueId, releaseId })
|
||||
.pipe(map((d) => toCommandResult(d.setIssueRelease)));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user