Browse Source

feat: add upgrader for migrating existing

pull/7304/head
Pranav C 9 months ago
parent
commit
e58e221047
  1. 2
      packages/nocodb/src/version-upgrader/NcUpgrader.ts
  2. 66
      packages/nocodb/src/version-upgrader/ncXcdbCreatedAndUpdatedTimeUpgrader.ts

2
packages/nocodb/src/version-upgrader/NcUpgrader.ts

@ -16,6 +16,7 @@ import ncHookUpgrader from './ncHookUpgrader';
import ncProjectConfigUpgrader from './ncProjectConfigUpgrader';
import ncXcdbLTARUpgrader from './ncXcdbLTARUpgrader';
import ncXcdbLTARIndexUpgrader from './ncXcdbLTARIndexUpgrader';
import ncXcdbCreatedAndUpdatedTimeUpgrader from './ncXcdbCreatedAndUpdatedTimeUpgrader';
import type { MetaService } from '~/meta/meta.service';
import type { NcConfig } from '~/interface/config';
@ -144,6 +145,7 @@ export default class NcUpgrader {
{ name: '0107004', handler: ncProjectConfigUpgrader },
{ name: '0108002', handler: ncXcdbLTARUpgrader },
{ name: '0111002', handler: ncXcdbLTARIndexUpgrader },
{ name: '0111004', handler: ncXcdbCreatedAndUpdatedTimeUpgrader },
];
}
}

66
packages/nocodb/src/version-upgrader/ncXcdbCreatedAndUpdatedTimeUpgrader.ts

@ -0,0 +1,66 @@
import { UITypes } from 'nocodb-sdk';
import { Logger } from '@nestjs/common';
import type { NcUpgraderCtx } from './NcUpgrader';
import type { MetaService } from '~/meta/meta.service';
import { MetaTable } from '~/utils/globals';
import { Column, Model } from '~/models';
// An upgrader for upgrading created_at and updated_at columns
// to system column and convert to new uidt CreateTime and LastModifiedTime
const logger = new Logger('XcdbCreatedAndUpdatedTimeUpgrader');
async function upgradeModels({
ncMeta,
source,
}: {
ncMeta: MetaService;
source: any;
}) {
const models = await Model.list(
{
base_id: source.base_id,
source_id: source.id,
},
ncMeta,
);
await Promise.all(
models.map(async (model: any) => {
const columns = await model.getColumns(ncMeta);
for (const column of columns) {
if (column.column_name === 'created_at') {
await Column.update(column.id, {
uidt: UITypes.CreateTime,
system: true,
});
}
if (column.uidt === 'updated_at') {
await Column.update(column.id, {
uidt: UITypes.LastModifiedTime,
system: true,
});
}
}
logger.log(`Upgraded model ${model.name} from source ${source.name}`);
}),
);
}
// database to virtual relation and create an index for it
export default async function ({ ncMeta }: NcUpgraderCtx) {
// get all xcdb sources
const sources = await ncMeta.metaList2(null, null, MetaTable.BASES, {
condition: {
is_meta: 1,
},
orderBy: {},
});
// iterate and upgrade each base
for (const source of sources) {
logger.log(`Upgrading source ${source.name}`);
// update the meta props
await upgradeModels({ ncMeta, source });
}
}
Loading…
Cancel
Save