refactor api modules

This commit is contained in:
2025-12-22 21:45:14 +01:00
parent 1333f5e907
commit 41b27402dc
5 changed files with 474 additions and 125 deletions

View File

@@ -1,4 +1,4 @@
import { EnsureInitialData } from '@/adapters/bootstrap/EnsureInitialData';
import { EnsureInitialData } from '../../../../../adapters/bootstrap/EnsureInitialData';
import { Module, OnModuleInit } from '@nestjs/common';
import { BootstrapProviders } from './BootstrapProviders';

View File

@@ -6,6 +6,7 @@ import type { IUserRepository } from '@core/identity/domain/repositories/IUserRe
import type { IAchievementRepository } from '@core/identity/application/use-cases/achievement/CreateAchievementUseCase';
import type { IdentitySessionPort } from '@core/identity/application/ports/IdentitySessionPort';
import type { Logger } from '@core/shared/application';
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
import { InMemoryUserRepository } from '../../../../../adapters/identity/persistence/inmemory/InMemoryUserRepository';
import { InMemoryAchievementRepository } from '../../../../../adapters/persistence/inmemory/achievement/InMemoryAchievementRepository';
import { CookieIdentitySessionAdapter } from '../../../../../adapters/identity/session/CookieIdentitySessionAdapter';
@@ -17,6 +18,21 @@ export const IDENTITY_SESSION_PORT_TOKEN = 'IdentitySessionPort_Bootstrap';
export const SIGNUP_USE_CASE_TOKEN = 'SignupWithEmailUseCase_Bootstrap';
export const CREATE_ACHIEVEMENT_USE_CASE_TOKEN = 'CreateAchievementUseCase_Bootstrap';
// Adapter classes for output ports
class SignupWithEmailOutputAdapter implements UseCaseOutputPort<any> {
present(result: any): void {
// Bootstrap doesn't need to handle output, just log success
console.log('[Bootstrap] Signup completed', result);
}
}
class CreateAchievementOutputAdapter implements UseCaseOutputPort<any> {
present(result: any): void {
// Bootstrap doesn't need to handle output, just log success
console.log('[Bootstrap] Achievement created', result);
}
}
export const BootstrapProviders: Provider[] = [
{
provide: USER_REPOSITORY_TOKEN,
@@ -34,21 +50,41 @@ export const BootstrapProviders: Provider[] = [
},
{
provide: SIGNUP_USE_CASE_TOKEN,
useFactory: (userRepository: IUserRepository, sessionPort: IdentitySessionPort) => {
return new SignupWithEmailUseCase(userRepository, sessionPort);
useFactory: (
userRepository: IUserRepository,
sessionPort: IdentitySessionPort,
logger: Logger
) => {
return new SignupWithEmailUseCase(
userRepository,
sessionPort,
logger,
new SignupWithEmailOutputAdapter()
);
},
inject: [USER_REPOSITORY_TOKEN, IDENTITY_SESSION_PORT_TOKEN],
inject: [USER_REPOSITORY_TOKEN, IDENTITY_SESSION_PORT_TOKEN, 'Logger'],
},
{
provide: CREATE_ACHIEVEMENT_USE_CASE_TOKEN,
useFactory: (achievementRepository: IAchievementRepository) => {
return new CreateAchievementUseCase(achievementRepository);
useFactory: (
achievementRepository: IAchievementRepository,
logger: Logger
) => {
return new CreateAchievementUseCase(
achievementRepository,
logger,
new CreateAchievementOutputAdapter()
);
},
inject: [ACHIEVEMENT_REPOSITORY_TOKEN],
inject: [ACHIEVEMENT_REPOSITORY_TOKEN, 'Logger'],
},
{
provide: EnsureInitialData,
useFactory: (signupUseCase: SignupWithEmailUseCase, createAchievementUseCase: CreateAchievementUseCase, logger: Logger) => {
useFactory: (
signupUseCase: SignupWithEmailUseCase,
createAchievementUseCase: CreateAchievementUseCase,
logger: Logger
) => {
return new EnsureInitialData(signupUseCase, createAchievementUseCase, logger);
},
inject: [SIGNUP_USE_CASE_TOKEN, CREATE_ACHIEVEMENT_USE_CASE_TOKEN, 'Logger'],