inmemory to postgres
This commit is contained in:
@@ -5,10 +5,12 @@ import { Inject, Module, OnModuleInit } from '@nestjs/common';
|
||||
import { getApiPersistence, getEnableBootstrap } from '../../env';
|
||||
import { RacingPersistenceModule } from '../../persistence/racing/RacingPersistenceModule';
|
||||
import { SocialPersistenceModule } from '../../persistence/social/SocialPersistenceModule';
|
||||
import { AchievementPersistenceModule } from '../../persistence/achievement/AchievementPersistenceModule';
|
||||
import { IdentityPersistenceModule } from '../../persistence/identity/IdentityPersistenceModule';
|
||||
import { BootstrapProviders, ENSURE_INITIAL_DATA_TOKEN } from './BootstrapProviders';
|
||||
|
||||
@Module({
|
||||
imports: [RacingPersistenceModule, SocialPersistenceModule],
|
||||
imports: [RacingPersistenceModule, SocialPersistenceModule, AchievementPersistenceModule, IdentityPersistenceModule],
|
||||
providers: BootstrapProviders,
|
||||
})
|
||||
export class BootstrapModule implements OnModuleInit {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Provider } from '@nestjs/common';
|
||||
import { SOCIAL_FEED_REPOSITORY_TOKEN, SOCIAL_GRAPH_REPOSITORY_TOKEN } from '../../persistence/social/SocialPersistenceTokens';
|
||||
import { ACHIEVEMENT_REPOSITORY_TOKEN } from '../../persistence/achievement/AchievementPersistenceTokens';
|
||||
import { EnsureInitialData } from '../../../../../adapters/bootstrap/EnsureInitialData';
|
||||
import type { RacingSeedDependencies } from '../../../../../adapters/bootstrap/SeedRacingData';
|
||||
import { SignupWithEmailUseCase, type SignupWithEmailResult } from '@core/identity/application/use-cases/SignupWithEmailUseCase';
|
||||
@@ -12,13 +13,12 @@ import type { IUserRepository } from '@core/identity/domain/repositories/IUserRe
|
||||
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';
|
||||
import { USER_REPOSITORY_TOKEN as IDENTITY_USER_REPOSITORY_TOKEN } from '../../persistence/identity/IdentityPersistenceTokens';
|
||||
|
||||
// Define tokens
|
||||
export const USER_REPOSITORY_TOKEN = 'IUserRepository_Bootstrap';
|
||||
export const ACHIEVEMENT_REPOSITORY_TOKEN = 'IAchievementRepository_Bootstrap';
|
||||
// ACHIEVEMENT_REPOSITORY_TOKEN is now imported from AchievementPersistenceTokens
|
||||
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';
|
||||
@@ -112,13 +112,10 @@ export const BootstrapProviders: Provider[] = [
|
||||
},
|
||||
{
|
||||
provide: USER_REPOSITORY_TOKEN,
|
||||
useFactory: (logger: Logger) => new InMemoryUserRepository(logger),
|
||||
inject: ['Logger'],
|
||||
},
|
||||
{
|
||||
provide: ACHIEVEMENT_REPOSITORY_TOKEN,
|
||||
useClass: InMemoryAchievementRepository,
|
||||
useFactory: (userRepository: IUserRepository) => userRepository,
|
||||
inject: [IDENTITY_USER_REPOSITORY_TOKEN],
|
||||
},
|
||||
// Achievement repository is now provided by AchievementPersistenceModule
|
||||
{
|
||||
provide: IDENTITY_SESSION_PORT_TOKEN,
|
||||
useFactory: (logger: Logger) => new CookieIdentitySessionAdapter(logger),
|
||||
|
||||
@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common';
|
||||
import { MediaService } from './MediaService';
|
||||
import { MediaController } from './MediaController';
|
||||
import { MediaProviders } from './MediaProviders';
|
||||
import { MediaPersistenceModule } from '../../persistence/media/MediaPersistenceModule';
|
||||
|
||||
@Module({
|
||||
imports: [MediaPersistenceModule],
|
||||
controllers: [MediaController],
|
||||
providers: [MediaService, ...MediaProviders],
|
||||
exports: [MediaService],
|
||||
|
||||
@@ -57,37 +57,11 @@ import {
|
||||
|
||||
export * from './MediaTokens';
|
||||
|
||||
import type { AvatarGenerationRequest } from '@core/media/domain/entities/AvatarGenerationRequest';
|
||||
import type { Media } from '@core/media/domain/entities/Media';
|
||||
import type { Avatar } from '@core/media/domain/entities/Avatar';
|
||||
import type { FaceValidationResult } from '@core/media/application/ports/FaceValidationPort';
|
||||
import type { AvatarGenerationResult } from '@core/media/application/ports/AvatarGenerationPort';
|
||||
import type { UploadResult } from '@core/media/application/ports/MediaStoragePort';
|
||||
|
||||
// Mock implementations
|
||||
class MockAvatarGenerationRepository implements IAvatarGenerationRepository {
|
||||
async save(): Promise<void> {}
|
||||
async findById(): Promise<AvatarGenerationRequest | null> { return null; }
|
||||
async findByUserId(): Promise<AvatarGenerationRequest[]> { return []; }
|
||||
async findLatestByUserId(): Promise<AvatarGenerationRequest | null> { return null; }
|
||||
async delete(): Promise<void> {}
|
||||
}
|
||||
|
||||
class MockMediaRepository implements IMediaRepository {
|
||||
async save(): Promise<void> {}
|
||||
async findById(): Promise<Media | null> { return null; }
|
||||
async findByUploadedBy(): Promise<Media[]> { return []; }
|
||||
async delete(): Promise<void> {}
|
||||
}
|
||||
|
||||
class MockAvatarRepository implements IAvatarRepository {
|
||||
async save(): Promise<void> {}
|
||||
async findById(): Promise<Avatar | null> { return null; }
|
||||
async findActiveByDriverId(): Promise<Avatar | null> { return null; }
|
||||
async findByDriverId(): Promise<Avatar[]> { return []; }
|
||||
async delete(): Promise<void> {}
|
||||
}
|
||||
|
||||
// External adapters (ports) - these remain mock implementations
|
||||
class MockFaceValidationAdapter implements FaceValidationPort {
|
||||
async validateFacePhoto(): Promise<FaceValidationResult> {
|
||||
return {
|
||||
@@ -137,18 +111,6 @@ export const MediaProviders: Provider[] = [
|
||||
DeleteMediaPresenter,
|
||||
GetAvatarPresenter,
|
||||
UpdateAvatarPresenter,
|
||||
{
|
||||
provide: AVATAR_GENERATION_REPOSITORY_TOKEN,
|
||||
useClass: MockAvatarGenerationRepository,
|
||||
},
|
||||
{
|
||||
provide: MEDIA_REPOSITORY_TOKEN,
|
||||
useClass: MockMediaRepository,
|
||||
},
|
||||
{
|
||||
provide: AVATAR_REPOSITORY_TOKEN,
|
||||
useClass: MockAvatarRepository,
|
||||
},
|
||||
{
|
||||
provide: FACE_VALIDATION_PORT_TOKEN,
|
||||
useClass: MockFaceValidationAdapter,
|
||||
|
||||
9
apps/api/src/domain/notifications/NotificationsModule.ts
Normal file
9
apps/api/src/domain/notifications/NotificationsModule.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { NotificationsPersistenceModule } from '../../persistence/notifications/NotificationsPersistenceModule';
|
||||
|
||||
@Module({
|
||||
imports: [NotificationsPersistenceModule],
|
||||
exports: [NotificationsPersistenceModule],
|
||||
})
|
||||
export class NotificationsModule {}
|
||||
Reference in New Issue
Block a user