Files
twenty_crm/server/src/tenant/tenant.service.ts
Weiko 1cf08c797f Convert metadata tables to camelCase (#2400)
* Convert metadata tables to camelCase

* datasourcemetadataid to datasourceid

* refactor metadata folders

* fix command

* move commands out of metadata

* fix seed

* rename objectId and fieldId in objectMetadataId and fieldMetadataId in FE

* fix field-metadata

* Fix

* Fix

* remove logs

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2023-11-09 20:06:10 +01:00

66 lines
2.2 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-empty-function */
import { Injectable } from '@nestjs/common';
import { GraphQLSchema, printSchema } from 'graphql';
import { makeExecutableSchema } from '@graphql-tools/schema';
import { gql } from 'graphql-tag';
import { DataSourceMetadataService } from 'src/metadata/data-source-metadata/data-source-metadata.service';
import { ObjectMetadataService } from 'src/metadata/object-metadata/object-metadata.service';
import { GraphQLSchemaFactory } from './schema-builder/graphql-schema.factory';
import { resolverBuilderMethodNames } from './resolver-builder/factories/factories';
import { ResolverFactory } from './resolver-builder/resolver.factory';
@Injectable()
export class TenantService {
constructor(
private readonly dataSourceMetadataService: DataSourceMetadataService,
private readonly objectMetadataService: ObjectMetadataService,
private readonly graphQLSchemaFactory: GraphQLSchemaFactory,
private readonly resolverFactory: ResolverFactory,
) {}
async createTenantSchema(workspaceId: string | undefined) {
if (!workspaceId) {
return new GraphQLSchema({});
}
const dataSourcesMetadata =
await this.dataSourceMetadataService.getDataSourcesMetadataFromWorkspaceId(
workspaceId,
);
// Can't find any data sources for this workspace
if (!dataSourcesMetadata || dataSourcesMetadata.length === 0) {
return new GraphQLSchema({});
}
const objectMetadataCollection =
await this.objectMetadataService.getObjectMetadataFromWorkspaceId(
workspaceId,
);
const autoGeneratedSchema = await this.graphQLSchemaFactory.create(
objectMetadataCollection,
resolverBuilderMethodNames,
);
const autoGeneratedResolvers = await this.resolverFactory.create(
workspaceId,
objectMetadataCollection,
resolverBuilderMethodNames,
);
// TODO: Cache the generate type definitions
const typeDefs = printSchema(autoGeneratedSchema);
const executableSchema = makeExecutableSchema({
typeDefs: gql`
${typeDefs}
`,
resolvers: autoGeneratedResolvers,
});
return executableSchema;
}
}