diff --git a/server/src/app.module.ts b/server/src/app.module.ts index 959c97163b..66f3235626 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -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) { diff --git a/server/src/tenant/schema-builder/storages/type-definitions.storage.ts b/server/src/tenant/schema-builder/storages/type-definitions.storage.ts index 34a221c583..3e066b7c23 100644 --- a/server/src/tenant/schema-builder/storages/type-definitions.storage.ts +++ b/server/src/tenant/schema-builder/storages/type-definitions.storage.ts @@ -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, diff --git a/server/src/tenant/tenant.service.ts b/server/src/tenant/tenant.service.ts index 6c35a1f264..ee19535f3e 100644 --- a/server/src/tenant/tenant.service.ts +++ b/server/src/tenant/tenant.service.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ import { Injectable } from '@nestjs/common'; import { GraphQLSchema, printSchema } from 'graphql';