@@ -4,25 +4,27 @@ import { makeExecutableSchema } from '@graphql-tools/schema';
4
4
import { GraphQLSchema , printSchema } from 'graphql' ;
5
5
import { gql } from 'graphql-tag' ;
6
6
7
+ import {
8
+ GraphqlQueryRunnerException ,
9
+ GraphqlQueryRunnerExceptionCode ,
10
+ } from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception' ;
7
11
import { ScalarsExplorerService } from 'src/engine/api/graphql/services/scalars-explorer.service' ;
8
12
import { workspaceResolverBuilderMethodNames } from 'src/engine/api/graphql/workspace-resolver-builder/factories/factories' ;
9
13
import { WorkspaceResolverFactory } from 'src/engine/api/graphql/workspace-resolver-builder/workspace-resolver.factory' ;
10
14
import { WorkspaceGraphQLSchemaFactory } from 'src/engine/api/graphql/workspace-schema-builder/workspace-graphql-schema.factory' ;
11
15
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type' ;
12
16
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service' ;
13
- import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service' ;
14
- import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.service' ;
17
+ import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service' ;
15
18
import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service' ;
16
19
@Injectable ( )
17
20
export class WorkspaceSchemaFactory {
18
21
constructor (
19
22
private readonly dataSourceService : DataSourceService ,
20
- private readonly objectMetadataService : ObjectMetadataService ,
21
23
private readonly scalarsExplorerService : ScalarsExplorerService ,
22
24
private readonly workspaceGraphQLSchemaFactory : WorkspaceGraphQLSchemaFactory ,
23
25
private readonly workspaceResolverFactory : WorkspaceResolverFactory ,
24
26
private readonly workspaceCacheStorageService : WorkspaceCacheStorageService ,
25
- private readonly workspaceMetadataVersionService : WorkspaceMetadataVersionService ,
27
+ private readonly workspaceMetadataCacheService : WorkspaceMetadataCacheService ,
26
28
) { }
27
29
28
30
async createGraphQLSchema ( authContext : AuthContext ) : Promise < GraphQLSchema > {
@@ -35,42 +37,50 @@ export class WorkspaceSchemaFactory {
35
37
authContext . workspace . id ,
36
38
) ;
37
39
38
- // Can'f find any data sources for this workspace
39
40
if ( ! dataSourcesMetadata || dataSourcesMetadata . length === 0 ) {
40
41
return new GraphQLSchema ( { } ) ;
41
42
}
42
43
43
- // Validate cache version
44
- await this . workspaceMetadataVersionService . flushCacheIfMetadataVersionIsOutdated (
45
- authContext . workspace . id ,
46
- ) ;
44
+ const currentCacheVersion =
45
+ await this . workspaceCacheStorageService . getMetadataVersion (
46
+ authContext . workspace . id ,
47
+ ) ;
48
+
49
+ if ( currentCacheVersion === undefined ) {
50
+ await this . workspaceMetadataCacheService . recomputeMetadataCache (
51
+ authContext . workspace . id ,
52
+ ) ;
53
+ throw new GraphqlQueryRunnerException (
54
+ 'Metadata cache version not found' ,
55
+ GraphqlQueryRunnerExceptionCode . METADATA_CACHE_VERSION_NOT_FOUND ,
56
+ ) ;
57
+ }
47
58
48
- // Get object metadata from cache
49
- let objectMetadataCollection =
59
+ const objectMetadataCollection =
50
60
await this . workspaceCacheStorageService . getObjectMetadataCollection (
51
61
authContext . workspace . id ,
62
+ currentCacheVersion ,
52
63
) ;
53
64
54
- // If object metadata is not cached, get it from the database
55
65
if ( ! objectMetadataCollection ) {
56
- objectMetadataCollection =
57
- await this . objectMetadataService . findManyWithinWorkspace (
58
- authContext . workspace . id ,
59
- ) ;
60
-
61
- await this . workspaceCacheStorageService . setObjectMetadataCollection (
66
+ await this . workspaceMetadataCacheService . recomputeMetadataCache (
62
67
authContext . workspace . id ,
63
- objectMetadataCollection ,
68
+ ) ;
69
+ throw new GraphqlQueryRunnerException (
70
+ 'Object metadata collection not found' ,
71
+ GraphqlQueryRunnerExceptionCode . METADATA_CACHE_VERSION_NOT_FOUND ,
64
72
) ;
65
73
}
66
74
67
75
// Get typeDefs from cache
68
76
let typeDefs = await this . workspaceCacheStorageService . getGraphQLTypeDefs (
69
77
authContext . workspace . id ,
78
+ currentCacheVersion ,
70
79
) ;
71
80
let usedScalarNames =
72
81
await this . workspaceCacheStorageService . getGraphQLUsedScalarNames (
73
82
authContext . workspace . id ,
83
+ currentCacheVersion ,
74
84
) ;
75
85
76
86
// If typeDefs are not cached, generate them
@@ -87,10 +97,12 @@ export class WorkspaceSchemaFactory {
87
97
88
98
await this . workspaceCacheStorageService . setGraphQLTypeDefs (
89
99
authContext . workspace . id ,
100
+ currentCacheVersion ,
90
101
typeDefs ,
91
102
) ;
92
103
await this . workspaceCacheStorageService . setGraphQLUsedScalarNames (
93
104
authContext . workspace . id ,
105
+ currentCacheVersion ,
94
106
usedScalarNames ,
95
107
) ;
96
108
}
0 commit comments