|
| 1 | +import { Injectable } from '@nestjs/common'; |
1 | 2 | import { node, type Query, relation } from 'cypher-query-builder'; |
2 | 3 | import { type AbstractClass } from 'type-fest'; |
3 | 4 | import { EnhancedResource } from '~/common'; |
| 5 | +import { ConfigService } from '~/core/config'; |
4 | 6 | import { EmailMessage } from '~/core/email'; |
5 | 7 | import { e } from '~/core/gel'; |
6 | 8 | import { createRelationships, exp } from '~/core/neo4j/query'; |
7 | | -import { INotificationStrategy, type InputOf } from '../../../notifications'; |
| 9 | +import { |
| 10 | + type ChannelAvailabilities, |
| 11 | + INotificationStrategy, |
| 12 | + type InputOf, |
| 13 | +} from '../../../notifications'; |
8 | 14 | import { ProjectStepChangedNotification } from '../emails/project-step-changed-notification.email'; |
9 | 15 | import { type ProjectTransitionNotification } from './project-transition-notification.dto'; |
10 | | -import type { ProjectTransitionViaMembershipNotification } from './project-transition-via-membership-notification.dto'; |
| 16 | +import { type ProjectTransitionViaMembershipNotification } from './project-transition-via-membership-notification.dto'; |
11 | 17 |
|
12 | 18 | /** |
13 | 19 | * Shared input type for all ProjectTransition notification strategies. |
14 | 20 | * Both concrete DTOs have the same extra fields (workflowEvent + previousStep). |
15 | 21 | */ |
16 | 22 | export type ProjectTransitionInput = InputOf<ProjectTransitionNotification>; |
17 | 23 |
|
| 24 | +@Injectable() |
18 | 25 | export abstract class ProjectTransitionNotificationStrategy< |
19 | 26 | T extends ProjectTransitionViaMembershipNotification, |
20 | 27 | > extends INotificationStrategy<T, ProjectTransitionInput> { |
21 | 28 | protected abstract readonly dtoClass: AbstractClass<T>; |
22 | 29 |
|
| 30 | + constructor(protected config: ConfigService) { |
| 31 | + super(); |
| 32 | + } |
| 33 | + |
| 34 | + override channelAvailabilities(): ChannelAvailabilities { |
| 35 | + return { |
| 36 | + ...super.channelAvailabilities(), |
| 37 | + Email: this.config.email.notifyProjectStepChanges |
| 38 | + ? 'DefaultOn' |
| 39 | + : 'DefaultOff', |
| 40 | + }; |
| 41 | + } |
| 42 | + |
23 | 43 | saveForNeo4j({ previousStep, workflowEvent }: ProjectTransitionInput) { |
24 | 44 | return (query: Query) => |
25 | 45 | query |
|
0 commit comments