seed data

This commit is contained in:
2025-12-26 23:06:23 +01:00
parent b4f86abf90
commit f3a89ed87f
15 changed files with 825 additions and 712 deletions

View File

@@ -1,4 +1,5 @@
import { EnsureInitialData } from '../../../../../adapters/bootstrap/EnsureInitialData';
import { SeedInMemoryRacingData } from '../../../../../adapters/bootstrap/SeedInMemoryRacingData';
import { Module, OnModuleInit } from '@nestjs/common';
import { BootstrapProviders } from './BootstrapProviders';
@@ -6,16 +7,33 @@ import { BootstrapProviders } from './BootstrapProviders';
providers: BootstrapProviders,
})
export class BootstrapModule implements OnModuleInit {
constructor(private readonly ensureInitialData: EnsureInitialData) {}
constructor(
private readonly ensureInitialData: EnsureInitialData,
private readonly seedInMemoryRacingData: SeedInMemoryRacingData,
) {}
async onModuleInit() {
console.log('[Bootstrap] Initializing application data...');
try {
await this.ensureInitialData.execute();
if (this.shouldSeedInMemory()) {
await this.seedInMemoryRacingData.execute();
}
console.log('[Bootstrap] Application data initialized successfully');
} catch (error) {
console.error('[Bootstrap] Failed to initialize application data:', error);
throw error;
}
}
private shouldSeedInMemory(): boolean {
const configured = (process.env.GRIDPILOT_API_PERSISTENCE ?? '').toLowerCase();
if (configured) {
return configured === 'inmemory';
}
return process.env.DATABASE_URL === undefined;
}
}

View File

@@ -1,5 +1,6 @@
import { Provider } from '@nestjs/common';
import { EnsureInitialData, type InMemorySeedDependencies } from '../../../../../adapters/bootstrap/EnsureInitialData';
import { EnsureInitialData } from '../../../../../adapters/bootstrap/EnsureInitialData';
import { SeedInMemoryRacingData, type InMemorySeedDependencies } from '../../../../../adapters/bootstrap/SeedInMemoryRacingData';
import { SignupWithEmailUseCase, type SignupWithEmailResult } from '@core/identity/application/use-cases/SignupWithEmailUseCase';
import {
CreateAchievementUseCase,
@@ -87,6 +88,19 @@ export const BootstrapProviders: Provider[] = [
signupUseCase: SignupWithEmailUseCase,
createAchievementUseCase: CreateAchievementUseCase,
logger: Logger,
) => {
return new EnsureInitialData(signupUseCase, createAchievementUseCase, logger);
},
inject: [
SIGNUP_USE_CASE_TOKEN,
CREATE_ACHIEVEMENT_USE_CASE_TOKEN,
'Logger',
],
},
{
provide: SeedInMemoryRacingData,
useFactory: (
logger: Logger,
driverRepository: InMemorySeedDependencies['driverRepository'],
leagueRepository: InMemorySeedDependencies['leagueRepository'],
raceRepository: InMemorySeedDependencies['raceRepository'],
@@ -113,11 +127,9 @@ export const BootstrapProviders: Provider[] = [
socialGraphRepository,
};
return new EnsureInitialData(signupUseCase, createAchievementUseCase, logger, deps);
return new SeedInMemoryRacingData(logger, deps);
},
inject: [
SIGNUP_USE_CASE_TOKEN,
CREATE_ACHIEVEMENT_USE_CASE_TOKEN,
'Logger',
'IDriverRepository',
'ILeagueRepository',