67 lines
2.8 KiB
TypeScript
67 lines
2.8 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
|
|
import { LoggingModule } from '../../domain/logging/LoggingModule';
|
|
|
|
import type { Logger } from '@core/shared/application/Logger';
|
|
|
|
import type { INotificationRepository } from '@core/notifications/domain/repositories/INotificationRepository';
|
|
import type { INotificationPreferenceRepository } from '@core/notifications/domain/repositories/INotificationPreferenceRepository';
|
|
import type { NotificationService } from '@core/notifications/application/ports/NotificationService';
|
|
import type { NotificationGatewayRegistry } from '@core/notifications/application/ports/NotificationGateway';
|
|
|
|
import { InMemoryNotificationRepository } from '@adapters/notifications/persistence/inmemory/InMemoryNotificationRepository';
|
|
import { InMemoryNotificationPreferenceRepository } from '@adapters/notifications/persistence/inmemory/InMemoryNotificationPreferenceRepository';
|
|
import { NotificationServiceAdapter } from '@adapters/notifications/ports/NotificationServiceAdapter';
|
|
import { InMemoryNotificationGatewayRegistry } from '@adapters/notifications/ports/InMemoryNotificationGatewayRegistry';
|
|
|
|
import { NOTIFICATION_REPOSITORY_TOKEN, NOTIFICATION_PREFERENCE_REPOSITORY_TOKEN } from '../notifications/NotificationsPersistenceTokens';
|
|
|
|
export const NOTIFICATION_SERVICE_TOKEN = 'INotificationService';
|
|
export const NOTIFICATION_GATEWAY_REGISTRY_TOKEN = 'INotificationGatewayRegistry';
|
|
|
|
@Module({
|
|
imports: [LoggingModule],
|
|
providers: [
|
|
{
|
|
provide: NOTIFICATION_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger): INotificationRepository =>
|
|
new InMemoryNotificationRepository(logger),
|
|
inject: ['Logger'],
|
|
},
|
|
{
|
|
provide: NOTIFICATION_PREFERENCE_REPOSITORY_TOKEN,
|
|
useFactory: (logger: Logger): INotificationPreferenceRepository =>
|
|
new InMemoryNotificationPreferenceRepository(logger),
|
|
inject: ['Logger'],
|
|
},
|
|
{
|
|
provide: NOTIFICATION_GATEWAY_REGISTRY_TOKEN,
|
|
useFactory: (): NotificationGatewayRegistry =>
|
|
new InMemoryNotificationGatewayRegistry(),
|
|
inject: [],
|
|
},
|
|
{
|
|
provide: NOTIFICATION_SERVICE_TOKEN,
|
|
useFactory: (
|
|
notificationRepo: INotificationRepository,
|
|
preferenceRepo: INotificationPreferenceRepository,
|
|
gatewayRegistry: NotificationGatewayRegistry,
|
|
logger: Logger,
|
|
): NotificationService =>
|
|
new NotificationServiceAdapter(notificationRepo, preferenceRepo, gatewayRegistry, logger),
|
|
inject: [
|
|
NOTIFICATION_REPOSITORY_TOKEN,
|
|
NOTIFICATION_PREFERENCE_REPOSITORY_TOKEN,
|
|
NOTIFICATION_GATEWAY_REGISTRY_TOKEN,
|
|
'Logger',
|
|
],
|
|
},
|
|
],
|
|
exports: [
|
|
NOTIFICATION_REPOSITORY_TOKEN,
|
|
NOTIFICATION_PREFERENCE_REPOSITORY_TOKEN,
|
|
NOTIFICATION_SERVICE_TOKEN,
|
|
NOTIFICATION_GATEWAY_REGISTRY_TOKEN,
|
|
],
|
|
})
|
|
export class InMemoryNotificationsPersistenceModule {} |