fix: schema builder use same type definitions storage across tenant (#2525)

This commit is contained in:
Jérémy M 2023-11-15 17:23:30 +01:00 committed by GitHub
parent 66051fa077
commit c02717c1e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 9 deletions

View File

@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ConfigModule } from '@nestjs/config';
import { APP_FILTER, ModuleRef } from '@nestjs/core';
import { APP_FILTER, ContextIdFactory, ModuleRef } from '@nestjs/core';
import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs';
import GraphQLJSON from 'graphql-type-json';
@ -37,11 +37,6 @@ import { ExceptionFilter } from './filters/exception.filter';
include: [CoreModule],
conditionalSchema: async (request) => {
try {
// Get the SchemaGenerationService from the AppModule
const tenantService = AppModule.moduleRef.get(TenantService, {
strict: false,
});
// Get the JwtAuthStrategy from the AppModule
const jwtStrategy = AppModule.moduleRef.get(JwtAuthStrategy, {
strict: false,
@ -74,6 +69,18 @@ import { ExceptionFilter } from './filters/exception.filter';
decoded as JwtPayload,
);
const contextId = ContextIdFactory.create();
AppModule.moduleRef.registerRequestByContextId(request, contextId);
// Get the SchemaGenerationService from the AppModule
const tenantService = await AppModule.moduleRef.resolve(
TenantService,
contextId,
{
strict: false,
},
);
return await tenantService.createTenantSchema(workspace.id);
} catch (error) {
if (error instanceof JsonWebTokenError) {

View File

@ -1,4 +1,4 @@
import { Injectable } from '@nestjs/common';
import { Injectable, Scope } from '@nestjs/common';
import { GraphQLInputObjectType, GraphQLObjectType } from 'graphql';
@ -12,7 +12,8 @@ import {
ObjectTypeDefinitionKind,
} from 'src/tenant/schema-builder/factories/object-type-definition.factory';
@Injectable()
// Must be scoped on REQUEST level
@Injectable({ scope: Scope.REQUEST })
export class TypeDefinitionsStorage {
private readonly objectTypeDefinitions = new Map<
string,

View File

@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-empty-function */
import { Injectable } from '@nestjs/common';
import { GraphQLSchema, printSchema } from 'graphql';