46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
|
|
import { GraphQLSchema } from 'graphql';
|
|
|
|
import { DataSourceMetadataService } from 'src/metadata/data-source-metadata/data-source-metadata.service';
|
|
import { ObjectMetadataService } from 'src/metadata/object-metadata/services/object-metadata.service';
|
|
|
|
import { SchemaBuilderService } from './schema-builder/schema-builder.service';
|
|
|
|
@Injectable()
|
|
export class TenantService {
|
|
constructor(
|
|
private readonly schemaBuilderService: SchemaBuilderService,
|
|
private readonly dataSourceMetadataService: DataSourceMetadataService,
|
|
private readonly objectMetadataService: ObjectMetadataService,
|
|
) {}
|
|
|
|
async createTenantSchema(workspaceId: string | undefined) {
|
|
if (!workspaceId) {
|
|
return new GraphQLSchema({});
|
|
}
|
|
|
|
const dataSourcesMetadata =
|
|
await this.dataSourceMetadataService.getDataSourcesMetadataFromWorkspaceId(
|
|
workspaceId,
|
|
);
|
|
|
|
// Can'f find any data sources for this workspace
|
|
if (!dataSourcesMetadata || dataSourcesMetadata.length === 0) {
|
|
return new GraphQLSchema({});
|
|
}
|
|
|
|
const dataSourceMetadata = dataSourcesMetadata[0];
|
|
|
|
const objectMetadata =
|
|
await this.objectMetadataService.getObjectMetadataFromDataSourceId(
|
|
dataSourceMetadata.id,
|
|
);
|
|
|
|
return this.schemaBuilderService.generateSchema(
|
|
workspaceId,
|
|
objectMetadata,
|
|
);
|
|
}
|
|
}
|