import { ConsoleLogger } from '@adapters/logging/ConsoleLogger'; import { InMemoryAvatarRepository } from '@adapters/media/persistence/inmemory/InMemoryAvatarRepository'; import { InMemoryAvatarGenerationRepository } from '@adapters/media/persistence/inmemory/InMemoryAvatarGenerationRepository'; import { InMemoryMediaRepository } from '@adapters/media/persistence/inmemory/InMemoryMediaRepository'; import { InMemoryMediaStorageAdapter } from '@adapters/media/ports/InMemoryMediaStorageAdapter'; import { InMemoryFaceValidationAdapter } from '@adapters/media/ports/InMemoryFaceValidationAdapter'; import { InMemoryAvatarGenerationAdapter } from '@adapters/media/ports/InMemoryAvatarGenerationAdapter'; import { InMemoryMediaEventPublisher } from '@adapters/media/events/InMemoryMediaEventPublisher'; import { GetAvatarUseCase } from '@core/media/application/use-cases/GetAvatarUseCase'; import { UpdateAvatarUseCase } from '@core/media/application/use-cases/UpdateAvatarUseCase'; import { RequestAvatarGenerationUseCase } from '@core/media/application/use-cases/RequestAvatarGenerationUseCase'; import { SelectAvatarUseCase } from '@core/media/application/use-cases/SelectAvatarUseCase'; import { GetUploadedMediaUseCase } from '@core/media/application/use-cases/GetUploadedMediaUseCase'; import { DeleteMediaUseCase } from '@core/media/application/use-cases/DeleteMediaUseCase'; import { UploadMediaUseCase } from '@core/media/application/use-cases/UploadMediaUseCase'; import { GetMediaUseCase } from '@core/media/application/use-cases/GetMediaUseCase'; export class MediaTestContext { public readonly logger: ConsoleLogger; public readonly avatarRepository: InMemoryAvatarRepository; public readonly avatarGenerationRepository: InMemoryAvatarGenerationRepository; public readonly mediaRepository: InMemoryMediaRepository; public readonly mediaStorage: InMemoryMediaStorageAdapter; public readonly faceValidation: InMemoryFaceValidationAdapter; public readonly avatarGeneration: InMemoryAvatarGenerationAdapter; public readonly eventPublisher: InMemoryMediaEventPublisher; public readonly getAvatarUseCase: GetAvatarUseCase; public readonly updateAvatarUseCase: UpdateAvatarUseCase; public readonly requestAvatarGenerationUseCase: RequestAvatarGenerationUseCase; public readonly selectAvatarUseCase: SelectAvatarUseCase; public readonly getUploadedMediaUseCase: GetUploadedMediaUseCase; public readonly deleteMediaUseCase: DeleteMediaUseCase; public readonly uploadMediaUseCase: UploadMediaUseCase; public readonly getMediaUseCase: GetMediaUseCase; private constructor() { this.logger = new ConsoleLogger(); this.avatarRepository = new InMemoryAvatarRepository(this.logger); this.avatarGenerationRepository = new InMemoryAvatarGenerationRepository(this.logger); this.mediaRepository = new InMemoryMediaRepository(this.logger); this.mediaStorage = new InMemoryMediaStorageAdapter(this.logger); this.faceValidation = new InMemoryFaceValidationAdapter(this.logger); this.avatarGeneration = new InMemoryAvatarGenerationAdapter(this.logger); this.eventPublisher = new InMemoryMediaEventPublisher(this.logger); this.getAvatarUseCase = new GetAvatarUseCase(this.avatarRepository, this.logger); this.updateAvatarUseCase = new UpdateAvatarUseCase(this.avatarRepository, this.logger); this.requestAvatarGenerationUseCase = new RequestAvatarGenerationUseCase( this.avatarGenerationRepository, this.faceValidation, this.avatarGeneration, this.logger ); this.selectAvatarUseCase = new SelectAvatarUseCase(this.avatarGenerationRepository, this.logger); this.getUploadedMediaUseCase = new GetUploadedMediaUseCase(this.mediaStorage); this.deleteMediaUseCase = new DeleteMediaUseCase(this.mediaRepository, this.mediaStorage, this.logger); this.uploadMediaUseCase = new UploadMediaUseCase(this.mediaRepository, this.mediaStorage, this.logger); this.getMediaUseCase = new GetMediaUseCase(this.mediaRepository, this.logger); } public static create(): MediaTestContext { return new MediaTestContext(); } public reset(): void { this.avatarRepository.clear(); this.avatarGenerationRepository.clear(); this.mediaRepository.clear(); this.mediaStorage.clear(); this.eventPublisher.clear(); } }