2023-11-03 13:33:45 +00:00
|
|
|
import { InjectDataSource } from '@nestjs/typeorm';
|
|
|
|
|
|
|
|
|
|
import { Command, CommandRunner } from 'nest-commander';
|
|
|
|
|
import { DataSource } from 'typeorm';
|
2023-10-28 10:25:43 +00:00
|
|
|
|
2023-11-10 10:48:44 +00:00
|
|
|
import { DataSourceService } from 'src/metadata/data-source/data-source.service';
|
2023-11-03 13:33:45 +00:00
|
|
|
import { TenantMigrationService } from 'src/metadata/tenant-migration/tenant-migration.service';
|
2023-11-10 14:33:25 +00:00
|
|
|
import { TenantMigrationRunnerService } from 'src/tenant-migration-runner/tenant-migration-runner.service';
|
2023-11-03 13:33:45 +00:00
|
|
|
import { seedCompanies } from 'src/database/typeorm-seeds/tenant/companies';
|
|
|
|
|
import { seedViewFields } from 'src/database/typeorm-seeds/tenant/view-fields';
|
|
|
|
|
import { seedViews } from 'src/database/typeorm-seeds/tenant/views';
|
|
|
|
|
import { seedObjectMetadata } from 'src/database/typeorm-seeds/metadata/object-metadata';
|
2023-11-10 14:33:25 +00:00
|
|
|
import { TypeORMService } from 'src/database/typeorm/typeorm.service';
|
2023-11-10 22:53:07 +00:00
|
|
|
import { seedCompanyFieldMetadata } from 'src/database/typeorm-seeds/metadata/field-metadata/company';
|
|
|
|
|
import { seedViewFieldMetadata } from 'src/database/typeorm-seeds/metadata/field-metadata/view';
|
|
|
|
|
import { seedViewFieldFieldMetadata } from 'src/database/typeorm-seeds/metadata/field-metadata/viewField';
|
|
|
|
|
import { seedViewFilterFieldMetadata } from 'src/database/typeorm-seeds/metadata/field-metadata/viewFilter';
|
|
|
|
|
import { seedViewSortFieldMetadata } from 'src/database/typeorm-seeds/metadata/field-metadata/viewSort';
|
|
|
|
|
import { seedViewRelationMetadata } from 'src/database/typeorm-seeds/metadata/relation-metadata/view';
|
2023-10-28 10:25:43 +00:00
|
|
|
|
|
|
|
|
// TODO: implement dry-run
|
|
|
|
|
@Command({
|
2023-11-03 13:33:45 +00:00
|
|
|
name: 'tenant:seed',
|
|
|
|
|
description:
|
|
|
|
|
'Seed tenant with initial data. This command is intended for development only.',
|
2023-10-28 10:25:43 +00:00
|
|
|
})
|
|
|
|
|
export class DataSeedTenantCommand extends CommandRunner {
|
2023-11-03 13:33:45 +00:00
|
|
|
workspaceId = 'twenty-7ed9d212-1c25-4d02-bf25-6aeccf7ea419';
|
|
|
|
|
|
2023-10-28 10:25:43 +00:00
|
|
|
constructor(
|
2023-11-03 13:33:45 +00:00
|
|
|
@InjectDataSource('metadata')
|
|
|
|
|
private readonly metadataDataSource: DataSource,
|
2023-11-10 10:48:44 +00:00
|
|
|
private readonly dataSourceService: DataSourceService,
|
2023-11-10 14:33:25 +00:00
|
|
|
private readonly typeORMService: TypeORMService,
|
2023-11-03 13:33:45 +00:00
|
|
|
private readonly tenantMigrationService: TenantMigrationService,
|
2023-11-10 14:33:25 +00:00
|
|
|
private readonly migrationRunnerService: TenantMigrationRunnerService,
|
2023-10-28 10:25:43 +00:00
|
|
|
) {
|
|
|
|
|
super();
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-03 13:33:45 +00:00
|
|
|
async run(): Promise<void> {
|
2023-10-28 10:25:43 +00:00
|
|
|
const dataSourceMetadata =
|
2023-11-10 14:33:25 +00:00
|
|
|
await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceIdOrFail(
|
2023-11-03 13:33:45 +00:00
|
|
|
this.workspaceId,
|
2023-10-28 10:25:43 +00:00
|
|
|
);
|
2023-11-03 13:33:45 +00:00
|
|
|
|
2023-11-10 14:33:25 +00:00
|
|
|
const workspaceDataSource = await this.typeORMService.connectToDataSource(
|
|
|
|
|
dataSourceMetadata,
|
|
|
|
|
);
|
2023-11-03 13:33:45 +00:00
|
|
|
|
|
|
|
|
if (!workspaceDataSource) {
|
|
|
|
|
throw new Error('Could not connect to workspace data source');
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-10 22:53:07 +00:00
|
|
|
try {
|
|
|
|
|
await seedObjectMetadata(this.metadataDataSource, 'metadata');
|
2023-11-03 13:33:45 +00:00
|
|
|
|
2023-11-10 22:53:07 +00:00
|
|
|
await seedCompanyFieldMetadata(this.metadataDataSource, 'metadata');
|
|
|
|
|
await seedViewFieldMetadata(this.metadataDataSource, 'metadata');
|
|
|
|
|
await seedViewFieldFieldMetadata(this.metadataDataSource, 'metadata');
|
|
|
|
|
await seedViewSortFieldMetadata(this.metadataDataSource, 'metadata');
|
|
|
|
|
await seedViewFilterFieldMetadata(this.metadataDataSource, 'metadata');
|
|
|
|
|
|
|
|
|
|
await seedViewRelationMetadata(this.metadataDataSource, 'metadata');
|
2023-11-03 13:33:45 +00:00
|
|
|
|
2023-11-10 22:53:07 +00:00
|
|
|
await this.tenantMigrationService.insertStandardMigrations(
|
|
|
|
|
this.workspaceId,
|
|
|
|
|
);
|
|
|
|
|
await this.migrationRunnerService.executeMigrationFromPendingMigrations(
|
|
|
|
|
this.workspaceId,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await seedCompanies(workspaceDataSource, dataSourceMetadata.schema);
|
|
|
|
|
await seedViews(workspaceDataSource, dataSourceMetadata.schema);
|
|
|
|
|
await seedViewFields(workspaceDataSource, dataSourceMetadata.schema);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(error);
|
|
|
|
|
}
|
2023-10-28 10:25:43 +00:00
|
|
|
|
2023-11-10 14:33:25 +00:00
|
|
|
await this.typeORMService.disconnectFromDataSource(dataSourceMetadata.id);
|
2023-10-28 10:25:43 +00:00
|
|
|
}
|
|
|
|
|
}
|