chore(db): scope hierarchy reset to live production
This commit is contained in:
@@ -32,6 +32,27 @@ export class ResetOperationalHierarchyData1790099200000 implements MigrationInte
|
|||||||
name = 'ResetOperationalHierarchyData1790099200000';
|
name = 'ResetOperationalHierarchyData1790099200000';
|
||||||
|
|
||||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
// This is a one-time live-data cleanup, not a new canonical empty seed.
|
||||||
|
// Fresh CI/bootstrap databases intentionally have no admin account while
|
||||||
|
// replaying the historical migration chain, so they must retain the F6.1
|
||||||
|
// presentation seed used by hierarchy/planning contract tests.
|
||||||
|
const adminRows = (await queryRunner.query(`
|
||||||
|
SELECT id
|
||||||
|
FROM users
|
||||||
|
WHERE lower(btrim(username))='admin'
|
||||||
|
ORDER BY id
|
||||||
|
`)) as Array<{ id: string }>;
|
||||||
|
if (adminRows.length === 0) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('[hierarchy-reset] skipped: no live admin account on migration replay');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (adminRows.length !== 1) {
|
||||||
|
throw new Error(
|
||||||
|
`Hierarchy reset aborted: expected exactly one live admin account, found ${adminRows.length}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const targetTypes = (await queryRunner.query(
|
const targetTypes = (await queryRunner.query(
|
||||||
`
|
`
|
||||||
SELECT lower(code) AS code
|
SELECT lower(code) AS code
|
||||||
|
|||||||
Reference in New Issue
Block a user