feat: refactor schema builder and resolver builder (#2215)
* feat: wip refactor schema builder * feat: wip store types and first queries generation * feat: refactor schema-builder and resolver-builder * fix: clean & small type fix * fix: avoid breaking change * fix: remove util from pg-graphql classes * fix: required default fields * Refactor frontend accordingly --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -1,18 +1,24 @@
|
||||
/* eslint-disable @typescript-eslint/no-empty-function */
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { GraphQLSchema } from 'graphql';
|
||||
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/services/object-metadata.service';
|
||||
|
||||
import { SchemaBuilderService } from './schema-builder/schema-builder.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 schemaBuilderService: SchemaBuilderService,
|
||||
private readonly dataSourceMetadataService: DataSourceMetadataService,
|
||||
private readonly objectMetadataService: ObjectMetadataService,
|
||||
private readonly graphQLSchemaFactory: GraphQLSchemaFactory,
|
||||
private readonly resolverFactory: ResolverFactory,
|
||||
) {}
|
||||
|
||||
async createTenantSchema(workspaceId: string | undefined) {
|
||||
@ -30,16 +36,30 @@ export class TenantService {
|
||||
return new GraphQLSchema({});
|
||||
}
|
||||
|
||||
const dataSourceMetadata = dataSourcesMetadata[0];
|
||||
|
||||
const objectMetadata =
|
||||
await this.objectMetadataService.getObjectMetadataFromDataSourceId(
|
||||
dataSourceMetadata.id,
|
||||
const objectMetadataCollection =
|
||||
await this.objectMetadataService.getObjectMetadataFromWorkspaceId(
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
return this.schemaBuilderService.generateSchema(
|
||||
workspaceId,
|
||||
objectMetadata,
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user