-
Notifications
You must be signed in to change notification settings - Fork 5
Migration
Phat Nguyen edited this page Jul 28, 2024
·
4 revisions
Visual (*) for the path is mentioned:
.
└── .src
└── migrations
└── sqls
└── 0000-migrate-0.ts
└── 0001-migrate-1.ts
└── xxxx-migrate-n.ts
└── migration-processes.ts
└── migrate.ts
└── application.ts
Content: migration-processes.ts
import { ApplicationKeys } from "@/common";
import { MigrationProcess, createViewPolicy } from "@tanphat199/lb-infra";
// Note:
// ViewPolicy is required for authorization, you can ignore this step if no authorization required
const seedPaths = [ "0000-migrate-0", "0000-migrate-1", ... ];
export const getMigrateProcesses = async (): Promise<{
cleanUps: Array<MigrationProcess>;
migrates: Array<MigrationProcess>;
}> => {
const cleanUps: Array<MigrationProcess> = [];
const migrates: Array<MigrationProcess> = [];
// Create authorization view
migrates.push( createViewPolicy({ datasourceKey: '<datasource_key>' }));
for (const seedPath of seedPaths) {
const p = (await import(`./${seedPath}`))?.default;
if (!p) {
continue;
}
if (p.fn) {
migrates.push({ name: p.name, fn: p.fn });
}
if (p.cleanFn) {
cleanUps.push({ name: `[CLEAN_UP] ${p.name}`, fn: p.cleanFn });
}
}
return { cleanUps, migrates };
};Content: migrate.ts
import { getMigrateProcesses } from '@/migrations/migration-processes';
import { applicationLogger, migration, ViewAuthorizePolicy } from '@tanphat199/lb-infra';
import { SASApplication } from './application';
const ignoreModels = [
// name of all ignore to migrates models
];
export const migrate = async (args: string[]) => {
const existingSchema = args.includes('--rebuild') ? 'drop' : 'alter';
const processes = await getMigrateProcesses();
const application = new Application();
await application.boot();
// clean up
if (existingSchema === 'alter') {
await migration(application, processes.cleanUps);
}
// migrate models
await application.migrateModels({ existingSchema, ignoreModels });
// migrate required step with previous declaration
await migration(application, processes.migrates);
};
migrate(process.argv)
.then(() => {
process.exit(0);
})
.catch(error => {
console.error(error);
process.exit(1);
});Run migrate.ts file all application migration.
Minimal Technology Vietnam
Minimal Technology Vietnam