diff --git a/server/src/metadata/migration-runner/migration-runner.service.ts b/server/src/metadata/migration-runner/migration-runner.service.ts index c93c79301..094e0d81a 100644 --- a/server/src/metadata/migration-runner/migration-runner.service.ts +++ b/server/src/metadata/migration-runner/migration-runner.service.ts @@ -45,9 +45,10 @@ export class MigrationRunnerService { // Loop over each migration and create or update the table // TODO: Should be done in a transaction - flattenedPendingMigrations.forEach(async (migration) => { + + for (const migration of flattenedPendingMigrations) { await this.handleTableChanges(queryRunner, schemaName, migration); - }); + } // Update appliedAt date for each migration // TODO: Should be done after the migration is successful diff --git a/server/src/metadata/tenant-initialisation/standard-objects/companies.seeds.json b/server/src/metadata/tenant-initialisation/standard-objects/companies.seeds.json new file mode 100644 index 000000000..883253bab --- /dev/null +++ b/server/src/metadata/tenant-initialisation/standard-objects/companies.seeds.json @@ -0,0 +1,32 @@ +[ + { + "name": "Airbnb", + "domainName": "airbnb.com", + "address": "San Francisco", + "employees": 5000 + }, + { + "name": "Qonto", + "domainName": "qonto.com", + "address": "San Francisco", + "employees": 800 + }, + { + "name": "Stripe", + "domainName": "stripe.com", + "address": "San Francisco", + "employees": 8000 + }, + { + "name": "Figma", + "domainName": "figma.com", + "address": "San Francisco", + "employees": 800 + }, + { + "name": "Notion", + "domainName": "notion.com", + "address": "San Francisco", + "employees": 400 + } +] diff --git a/server/src/metadata/tenant-initialisation/standard-objects/standard-object-seeds.ts b/server/src/metadata/tenant-initialisation/standard-objects/standard-object-seeds.ts new file mode 100644 index 000000000..621587c1c --- /dev/null +++ b/server/src/metadata/tenant-initialisation/standard-objects/standard-object-seeds.ts @@ -0,0 +1,5 @@ +import companySeeds from './companies.seeds.json'; + +export const standardObjectsSeeds = { + companyV2: companySeeds, +}; diff --git a/server/src/metadata/tenant-initialisation/tenant-initialisation.service.ts b/server/src/metadata/tenant-initialisation/tenant-initialisation.service.ts index 02dfdea36..8d2f8d2a9 100644 --- a/server/src/metadata/tenant-initialisation/tenant-initialisation.service.ts +++ b/server/src/metadata/tenant-initialisation/tenant-initialisation.service.ts @@ -8,8 +8,10 @@ import { ObjectMetadataService } from 'src/metadata/object-metadata/services/obj import { DataSourceMetadataService } from 'src/metadata/data-source-metadata/data-source-metadata.service'; import { FieldMetadata } from 'src/metadata/field-metadata/field-metadata.entity'; import { ObjectMetadata } from 'src/metadata/object-metadata/object-metadata.entity'; +import { DataSourceMetadata } from 'src/metadata/data-source-metadata/data-source-metadata.entity'; import { standardObjectsMetadata } from './standard-objects/standard-object-metadata'; +import { standardObjectsSeeds } from './standard-objects/standard-object-seeds'; @Injectable() export class TenantInitialisationService { @@ -51,6 +53,11 @@ export class TenantInitialisationService { dataSourceMetadata.id, workspaceId, ); + + await this.prefillWorkspaceWithStandardObjects( + dataSourceMetadata, + workspaceId, + ); } /** @@ -90,4 +97,38 @@ export class TenantInitialisationService { ), ); } + + private async prefillWorkspaceWithStandardObjects( + dataSourceMetadata: DataSourceMetadata, + workspaceId: string, + ) { + const objects = + await this.objectMetadataService.getObjectMetadataFromDataSourceId( + dataSourceMetadata.id, + ); + + const worksapceDataSource = + await this.dataSourceService.connectToWorkspaceDataSource(workspaceId); + + for (const object of objects) { + const seedData = standardObjectsSeeds[object.nameSingular]; + + if (!seedData) { + continue; + } + + const fields = standardObjectsMetadata[object.nameSingular].fields; + + const columns = fields.map((field: FieldMetadata) => + Object.values(field.targetColumnMap), + ); + + worksapceDataSource + ?.createQueryBuilder() + .insert() + .into(`${dataSourceMetadata.schema}.${object.targetTableName}`, columns) + .values(seedData) + .execute(); + } + } }