Files
edr-platform/apps/edr-freight-api/src/scripts/seed-warehouse-demo.ts

67 lines
2.6 KiB
TypeScript

import 'reflect-metadata';
import { config } from 'dotenv';
import { resolve } from 'path';
config({ path: resolve(__dirname, '../../.env') });
import { NestFactory } from '@nestjs/core';
import { DataSource } from 'typeorm';
import { AppModule } from '../app.module';
import { Batch14TestDataSeeder } from '../seed/batch1-4-test-data.seeder';
import { Batch5TestDataSeeder } from '../seed/batch5-test-data.seeder';
import { Batch7TestDataSeeder } from '../seed/batch7-test-data.seeder';
import { Batch8TestDataSeeder } from '../seed/batch8-test-data.seeder';
import { IndodeFacilitySeeder } from '../seed/indode-facility.seeder';
import { PricingDataSeeder } from '../seed/pricing-data.seeder';
import { WarehouseDemoSeeder } from '../seed/warehouse-demo.seeder';
/** Demo data only — refuse to run against anything but a local dev database. */
function assertLocalhost() {
const host = process.env.DB_HOST ?? 'localhost';
if (host !== 'localhost' && host !== '127.0.0.1') {
console.error(`Refusing to seed demo data: DB_HOST is "${host}", not localhost.`);
process.exit(1);
}
}
async function main() {
assertLocalhost();
const app = await NestFactory.createApplicationContext(AppModule, {
logger: ['error', 'warn', 'log'],
});
try {
// Demo seeders are intentionally not AppModule providers (they'd run on every
// boot), so construct them against the app's DataSource instead of via DI.
const dataSource = app.get(DataSource);
// Each bucket is independent: a seeder that has drifted from the current
// schema shouldn't stop the rest of the demo data from landing.
const step = async (name: string, run: () => Promise<void>) => {
try {
await run();
} catch (error) {
console.warn(` ! ${name} skipped: ${error instanceof Error ? error.message : String(error)}`);
}
};
await step('PricingDataSeeder', () => new PricingDataSeeder(dataSource).run());
await step('IndodeFacilitySeeder', () => new IndodeFacilitySeeder(dataSource).run());
await step('Batch14TestDataSeeder', () => new Batch14TestDataSeeder(dataSource).run());
await step('Batch5TestDataSeeder', () => new Batch5TestDataSeeder(dataSource).run());
await step('Batch7TestDataSeeder', () => new Batch7TestDataSeeder(dataSource).run());
await step('Batch8TestDataSeeder', () => new Batch8TestDataSeeder(dataSource).run());
await step('WarehouseDemoSeeder', () => new WarehouseDemoSeeder(dataSource).run());
console.log('Warehouse demo data seeded.');
} finally {
await app.close();
}
}
main().catch((err) => {
console.error('Warehouse demo seed failed:', err);
process.exit(1);
});