Files are uploaded over REST, stored on disk (a volume in Docker) and recorded on the ticket as events; the bytes are written first, so no attachment ever points at a missing file. Only images, video, audio, PDF and plain text are shown inline, everything with nosniff and a sandbox CSP. The web shows thumbnails, uploads by drag and drop or by pasting a screenshot, and attaches files to new comments. Also adds `nx run api:contracts`, which writes schema.gql and openapi.json without starting the API or any database. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import {
|
|
makeEnvironmentProviders,
|
|
type EnvironmentProviders,
|
|
} from '@angular/core';
|
|
import {
|
|
ActivityGateway,
|
|
AttachmentsGateway,
|
|
CommentsGateway,
|
|
IssuesGateway,
|
|
ProjectsGateway,
|
|
ReleasesGateway,
|
|
TrackerRealtimeGateway,
|
|
UsersGateway,
|
|
} from '@task-stream/web/tracker/domain';
|
|
import {
|
|
GraphqlActivityGateway,
|
|
GraphqlCommentsGateway,
|
|
GraphqlReleasesGateway,
|
|
GraphqlUsersGateway,
|
|
} from './adapters/graphql-collaboration.gateways';
|
|
import { GraphqlIssuesGateway } from './adapters/graphql-issues.gateway';
|
|
import { HttpAttachmentsGateway } from './adapters/http-attachments.gateway';
|
|
import { GraphqlProjectsGateway } from './adapters/graphql-projects.gateway';
|
|
import { GraphqlRealtimeGateway } from './adapters/graphql-realtime.gateway';
|
|
|
|
/** Ports → GraphQL adapters (and REST for files). */
|
|
export function provideTrackerInfrastructure(): EnvironmentProviders {
|
|
return makeEnvironmentProviders([
|
|
{ provide: ProjectsGateway, useClass: GraphqlProjectsGateway },
|
|
{ provide: IssuesGateway, useClass: GraphqlIssuesGateway },
|
|
{ provide: CommentsGateway, useClass: GraphqlCommentsGateway },
|
|
{ provide: ReleasesGateway, useClass: GraphqlReleasesGateway },
|
|
{ provide: ActivityGateway, useClass: GraphqlActivityGateway },
|
|
{ provide: AttachmentsGateway, useClass: HttpAttachmentsGateway },
|
|
{ provide: UsersGateway, useClass: GraphqlUsersGateway },
|
|
{ provide: TrackerRealtimeGateway, useClass: GraphqlRealtimeGateway },
|
|
]);
|
|
}
|