Files
gridpilot.gg/apps/api/src/persistence/inmemory/InMemoryNotificationsPersistenceModule.ts
2025-12-29 20:50:03 +01:00

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 {}