* wip: refacto and start creating custom resolver * feat: findMany & findUnique of a custom entity * feat: wip pagination * feat: initial metadata migration * feat: universal findAll with pagination * fix: clean small stuff in pagination * fix: test * fix: miss file * feat: rename custom into universal * feat: create metadata schema in default database * Multi-tenant db schemas POC fix tests and use query builders remove synchronize restore updatedAt remove unnecessary import use queryRunner fix camelcase add migrations for standard objects Multi-tenant db schemas POC fix tests and use query builders remove synchronize restore updatedAt remove unnecessary import use queryRunner fix camelcase add migrations for standard objects poc: conditional schema at runtime wip: try to create resolver in Nest.JS context fix * feat: wip add pg_graphql * feat: setup pg_graphql during database init * wip: dynamic resolver * poc: dynamic resolver and query using pg_graphql * feat: pg_graphql use ARG in Dockerfile * feat: clean findMany & findOne dynamic resolver * feat: get correct schema based on access token * fix: remove old file * fix: tests * fix: better comment * fix: e2e test not working, error format change due to yoga * remove typeorm entity generation + fix jwt + fix search_path + remove anon * fix conflict --------- Co-authored-by: Charles Bochet <charles@twenty.com> Co-authored-by: corentin <corentin@twenty.com>
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import { Controller, Get, UseGuards } from '@nestjs/common';
|
|
|
|
import { Workspace } from '@prisma/client';
|
|
import { EntitySchema } from 'typeorm';
|
|
|
|
import { AuthWorkspace } from 'src/decorators/auth-workspace.decorator';
|
|
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
|
|
|
|
import { DataSourceMetadataService } from './data-source-metadata/data-source-metadata.service';
|
|
import { EntitySchemaGeneratorService } from './entity-schema-generator/entity-schema-generator.service';
|
|
import { DataSourceService } from './data-source/data-source.service';
|
|
import { MigrationGeneratorService } from './migration-generator/migration-generator.service';
|
|
|
|
@UseGuards(JwtAuthGuard)
|
|
@Controller('metadata')
|
|
export class MetadataController {
|
|
constructor(
|
|
private readonly entitySchemaGeneratorService: EntitySchemaGeneratorService,
|
|
private readonly dataSourceMetadataService: DataSourceMetadataService,
|
|
private readonly dataSourceService: DataSourceService,
|
|
private readonly migrationGenerator: MigrationGeneratorService,
|
|
) {}
|
|
|
|
@Get()
|
|
async getMetadata(@AuthWorkspace() workspace: Workspace) {
|
|
const dataSourcesMetadata =
|
|
await this.dataSourceMetadataService.getDataSourcesMetadataFromWorkspaceId(
|
|
workspace.id,
|
|
);
|
|
|
|
const entities: EntitySchema<{
|
|
id: unknown;
|
|
}>[] = [];
|
|
|
|
for (const dataSource of dataSourcesMetadata) {
|
|
const dataSourceEntities =
|
|
await this.entitySchemaGeneratorService.getTypeORMEntitiesByDataSourceId(
|
|
dataSource.id,
|
|
);
|
|
|
|
entities.push(...dataSourceEntities);
|
|
}
|
|
|
|
this.dataSourceService.createWorkspaceSchema(workspace.id);
|
|
|
|
await this.migrationGenerator.executeMigrationFromPendingMigrations(
|
|
workspace.id,
|
|
);
|
|
|
|
this.dataSourceService.connectToWorkspaceDataSource(workspace.id);
|
|
|
|
return entities;
|
|
}
|
|
}
|