0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2024-12-16 20:26:19 -05:00
logto/packages/schemas/alterations/1.0.0-1678953179-update-get-started-task-config.ts
Gao Sun 28e9fa4290
release: core v1.0.0 (#3554)
* chore: move changesets

* release: core v1.0.0

* chore: update workflow
2023-03-20 23:57:04 +08:00

102 lines
2.8 KiB
TypeScript

import type { DatabaseTransactionConnection } from 'slonik';
import { sql } from 'slonik';
import type { AlterationScript } from '../lib/types/alteration.js';
const adminConsoleConfigKey = 'adminConsole';
type OldAdminConsoleData = {
livePreviewChecked: boolean;
applicationCreated: boolean;
signInExperienceCustomized: boolean;
passwordlessConfigured: boolean;
selfHostingChecked: boolean;
communityChecked: boolean;
m2mApplicationCreated: boolean;
} & Record<string, unknown>;
type OldLogtoAdminConsoleConfig = {
tenantId: string;
value: OldAdminConsoleData;
};
type NewAdminConsoleData = {
livePreviewChecked: boolean;
applicationCreated: boolean;
signInExperienceCustomized: boolean;
passwordlessConfigured: boolean;
furtherReadingsChecked: boolean;
roleCreated: boolean;
communityChecked: boolean;
m2mApplicationCreated: boolean;
} & Record<string, unknown>;
type NewLogtoAdminConsoleConfig = {
tenantId: string;
value: NewAdminConsoleData;
};
const alterAdminConsoleData = async (
logtoConfig: OldLogtoAdminConsoleConfig,
pool: DatabaseTransactionConnection
) => {
const { tenantId, value: oldAdminConsoleConfig } = logtoConfig;
const {
selfHostingChecked, // Extract to remove from config
...others
} = oldAdminConsoleConfig;
const newAdminConsoleData: NewAdminConsoleData = {
...others,
furtherReadingsChecked: false,
roleCreated: false,
};
await pool.query(
sql`update logto_configs set value = ${JSON.stringify(
newAdminConsoleData
)} where tenant_id = ${tenantId} and key = ${adminConsoleConfigKey}`
);
};
const rollbackAdminConsoleData = async (
logtoConfig: NewLogtoAdminConsoleConfig,
pool: DatabaseTransactionConnection
) => {
const { tenantId, value: newAdminConsoleConfig } = logtoConfig;
const {
furtherReadingsChecked, // Extract to remove from config
roleCreated, // Extract to remove from config
...others
} = newAdminConsoleConfig;
const oldAdminConsoleData: OldAdminConsoleData = {
...others,
selfHostingChecked: false,
};
await pool.query(
sql`update logto_configs set value = ${JSON.stringify(
oldAdminConsoleData
)} where tenant_id = ${tenantId} and key = ${adminConsoleConfigKey}`
);
};
const alteration: AlterationScript = {
up: async (pool) => {
const rows = await pool.many<OldLogtoAdminConsoleConfig>(
sql`select * from logto_configs where key = ${adminConsoleConfigKey}`
);
await Promise.all(rows.map(async (row) => alterAdminConsoleData(row, pool)));
},
down: async (pool) => {
const rows = await pool.many<NewLogtoAdminConsoleConfig>(
sql`select * from logto_configs where key = ${adminConsoleConfigKey}`
);
await Promise.all(rows.map(async (row) => rollbackAdminConsoleData(row, pool)));
},
};
export default alteration;