seed data
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
import type { Logger } from '@core/shared/application';
|
||||
import { EnsureInitialData } from '../../../../../adapters/bootstrap/EnsureInitialData';
|
||||
import { SeedInMemoryRacingData } from '../../../../../adapters/bootstrap/SeedInMemoryRacingData';
|
||||
import { SeedRacingData, type RacingSeedDependencies } from '../../../../../adapters/bootstrap/SeedRacingData';
|
||||
import { Module, OnModuleInit } from '@nestjs/common';
|
||||
import { ModuleRef } from '@nestjs/core';
|
||||
import { getApiPersistence } from '../../env';
|
||||
import { BootstrapProviders } from './BootstrapProviders';
|
||||
|
||||
@Module({
|
||||
@@ -9,7 +12,7 @@ import { BootstrapProviders } from './BootstrapProviders';
|
||||
export class BootstrapModule implements OnModuleInit {
|
||||
constructor(
|
||||
private readonly ensureInitialData: EnsureInitialData,
|
||||
private readonly seedInMemoryRacingData: SeedInMemoryRacingData,
|
||||
private readonly moduleRef: ModuleRef,
|
||||
) {}
|
||||
|
||||
async onModuleInit() {
|
||||
@@ -17,8 +20,15 @@ export class BootstrapModule implements OnModuleInit {
|
||||
try {
|
||||
await this.ensureInitialData.execute();
|
||||
|
||||
if (this.shouldSeedInMemory()) {
|
||||
await this.seedInMemoryRacingData.execute();
|
||||
if (this.shouldSeedRacingData()) {
|
||||
const logger = this.tryGet<Logger>('Logger');
|
||||
const seedDeps = this.tryGetSeedDeps();
|
||||
|
||||
if (!logger || !seedDeps) {
|
||||
console.log('[Bootstrap] Racing seed skipped (missing providers)');
|
||||
} else {
|
||||
await new SeedRacingData(logger, seedDeps).execute();
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[Bootstrap] Application data initialized successfully');
|
||||
@@ -28,12 +38,65 @@ export class BootstrapModule implements OnModuleInit {
|
||||
}
|
||||
}
|
||||
|
||||
private shouldSeedInMemory(): boolean {
|
||||
const configured = (process.env.GRIDPILOT_API_PERSISTENCE ?? '').toLowerCase();
|
||||
if (configured) {
|
||||
return configured === 'inmemory';
|
||||
private shouldSeedRacingData(): boolean {
|
||||
return getApiPersistence() === 'inmemory';
|
||||
}
|
||||
|
||||
private tryGet<T>(token: string): T | undefined {
|
||||
try {
|
||||
return this.moduleRef.get(token, { strict: false });
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
private tryGetSeedDeps(): RacingSeedDependencies | undefined {
|
||||
const driverRepository = this.tryGet<RacingSeedDependencies['driverRepository']>('IDriverRepository');
|
||||
const leagueRepository = this.tryGet<RacingSeedDependencies['leagueRepository']>('ILeagueRepository');
|
||||
const raceRepository = this.tryGet<RacingSeedDependencies['raceRepository']>('IRaceRepository');
|
||||
const resultRepository = this.tryGet<RacingSeedDependencies['resultRepository']>('IResultRepository');
|
||||
const standingRepository = this.tryGet<RacingSeedDependencies['standingRepository']>('IStandingRepository');
|
||||
const leagueMembershipRepository = this.tryGet<RacingSeedDependencies['leagueMembershipRepository']>(
|
||||
'ILeagueMembershipRepository',
|
||||
);
|
||||
const raceRegistrationRepository = this.tryGet<RacingSeedDependencies['raceRegistrationRepository']>(
|
||||
'IRaceRegistrationRepository',
|
||||
);
|
||||
const teamRepository = this.tryGet<RacingSeedDependencies['teamRepository']>('ITeamRepository');
|
||||
const teamMembershipRepository = this.tryGet<RacingSeedDependencies['teamMembershipRepository']>(
|
||||
'ITeamMembershipRepository',
|
||||
);
|
||||
const feedRepository = this.tryGet<RacingSeedDependencies['feedRepository']>('IFeedRepository');
|
||||
const socialGraphRepository = this.tryGet<RacingSeedDependencies['socialGraphRepository']>('ISocialGraphRepository');
|
||||
|
||||
if (
|
||||
!driverRepository ||
|
||||
!leagueRepository ||
|
||||
!raceRepository ||
|
||||
!resultRepository ||
|
||||
!standingRepository ||
|
||||
!leagueMembershipRepository ||
|
||||
!raceRegistrationRepository ||
|
||||
!teamRepository ||
|
||||
!teamMembershipRepository ||
|
||||
!feedRepository ||
|
||||
!socialGraphRepository
|
||||
) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return process.env.DATABASE_URL === undefined;
|
||||
return {
|
||||
driverRepository,
|
||||
leagueRepository,
|
||||
raceRepository,
|
||||
resultRepository,
|
||||
standingRepository,
|
||||
leagueMembershipRepository,
|
||||
raceRegistrationRepository,
|
||||
teamRepository,
|
||||
teamMembershipRepository,
|
||||
feedRepository,
|
||||
socialGraphRepository,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user