0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-01-06 20:40:08 -05:00
logto/packages/schemas/alterations/1.22.0-1731054001-init-account-center.ts
2024-11-22 17:04:11 +08:00

43 lines
1.2 KiB
TypeScript

import { sql } from '@silverhand/slonik';
import type { AlterationScript } from '../lib/types/alteration.js';
const alteration: AlterationScript = {
up: async (pool) => {
// Process in chunks of 1000 tenants
const batchSize = 1000;
// eslint-disable-next-line @silverhand/fp/no-let
let offset = 0;
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition
while (true) {
// eslint-disable-next-line no-await-in-loop
const tenants = await pool.any<{ id: string }>(sql`
select id from tenants
order by created_at asc, id asc
limit ${batchSize} offset ${offset};
`);
if (tenants.length === 0) {
break;
}
const values = tenants.map((tenant) => sql`(${tenant.id}, 'default')`);
// eslint-disable-next-line no-await-in-loop
await pool.query(sql`
insert into account_centers (tenant_id, id)
values ${sql.join(values, sql`, `)}
`);
// eslint-disable-next-line @silverhand/fp/no-mutation
offset += batchSize;
}
},
down: async (pool) => {
await pool.query(sql`
delete from account_centers where id = 'default';
`);
},
};
export default alteration;