commit bfcf271a64c33a60f61f511cec2198d9c8a9c51a Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Wed Nov 26 12:32:40 2025 +0100 wip commit8cd3b89fa3Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Tue Nov 25 22:33:58 2025 +0100 funnel commit95af86dc44Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Tue Nov 25 22:23:25 2025 +0100 wip commit727a218e6bAuthor: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Tue Nov 25 10:18:26 2025 +0100 conversion wip commit958ba535d6Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Tue Nov 25 10:18:20 2025 +0100 wip commit3bbeb927ccAuthor: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Tue Nov 25 09:18:48 2025 +0100 wip commitd99335e2f4Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Mon Nov 24 18:08:10 2025 +0100 wip commit1fa61b1ae9Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Mon Nov 24 15:50:28 2025 +0100 ts commit548747d826Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Mon Nov 24 13:17:01 2025 +0100 fix typecheck events -> series commit7b18544085Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Mon Nov 24 13:06:46 2025 +0100 fix report table commit57697a5a39Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Sat Nov 22 00:05:13 2025 +0100 wip commit06fb6c4f3cAuthor: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Fri Nov 21 11:21:17 2025 +0100 wip commitdd71fd4e11Author: Carl-Gerhard Lindesvärd <lindesvard@gmail.com> Date: Thu Nov 20 13:56:58 2025 +0100 formulas
105 lines
2.7 KiB
TypeScript
105 lines
2.7 KiB
TypeScript
import { shortId } from '@openpanel/common';
|
|
import type {
|
|
IChartEvent,
|
|
IChartEventItem,
|
|
IChartFormula,
|
|
} from '@openpanel/validation';
|
|
import { db } from '../index';
|
|
import { printBoxMessage } from './helpers';
|
|
|
|
export async function up() {
|
|
printBoxMessage('🔄 Migrating Events to Series Format', []);
|
|
|
|
// Get all reports
|
|
const reports = await db.report.findMany({
|
|
select: {
|
|
id: true,
|
|
events: true,
|
|
formula: true,
|
|
name: true,
|
|
},
|
|
});
|
|
|
|
let migratedCount = 0;
|
|
let skippedCount = 0;
|
|
let formulaAddedCount = 0;
|
|
|
|
for (const report of reports) {
|
|
const events = report.events as unknown as Array<
|
|
Partial<IChartEventItem> | Partial<IChartEvent>
|
|
>;
|
|
const oldFormula = report.formula;
|
|
|
|
// Check if any event is missing the 'type' field (old format)
|
|
const needsEventMigration =
|
|
Array.isArray(events) &&
|
|
events.length > 0 &&
|
|
events.some(
|
|
(event) => !event || typeof event !== 'object' || !('type' in event),
|
|
);
|
|
|
|
// Check if formula exists and isn't already in the series
|
|
const hasFormulaInSeries =
|
|
Array.isArray(events) &&
|
|
events.some(
|
|
(item) =>
|
|
item &&
|
|
typeof item === 'object' &&
|
|
'type' in item &&
|
|
item.type === 'formula',
|
|
);
|
|
|
|
const needsFormulaMigration = !!oldFormula && !hasFormulaInSeries;
|
|
|
|
// Skip if no migration needed
|
|
if (!needsEventMigration && !needsFormulaMigration) {
|
|
skippedCount++;
|
|
continue;
|
|
}
|
|
|
|
// Transform events to new format: add type: 'event' to each event
|
|
const migratedSeries: IChartEventItem[] = Array.isArray(events)
|
|
? events.map((event) => {
|
|
if (event && typeof event === 'object' && 'type' in event) {
|
|
return event as IChartEventItem;
|
|
}
|
|
|
|
return {
|
|
...event,
|
|
type: 'event',
|
|
} as IChartEventItem;
|
|
})
|
|
: [];
|
|
|
|
// Add formula to series if it exists and isn't already there
|
|
if (needsFormulaMigration && oldFormula) {
|
|
const formulaItem: IChartFormula = {
|
|
type: 'formula',
|
|
formula: oldFormula,
|
|
id: shortId(),
|
|
};
|
|
migratedSeries.push(formulaItem);
|
|
formulaAddedCount++;
|
|
}
|
|
|
|
console.log(
|
|
`Updating report ${report.name} (${report.id}) with ${migratedSeries.length} series`,
|
|
);
|
|
// Update the report with migrated series
|
|
await db.report.update({
|
|
where: { id: report.id },
|
|
data: {
|
|
events: migratedSeries,
|
|
},
|
|
});
|
|
|
|
migratedCount++;
|
|
}
|
|
|
|
printBoxMessage('✅ Migration Complete', [
|
|
`Migrated: ${migratedCount} reports`,
|
|
`Formulas added: ${formulaAddedCount} reports`,
|
|
`Skipped: ${skippedCount} reports (already in new format or empty)`,
|
|
]);
|
|
}
|