Fix microAmount (#2654)

* Fix microAmount

* Code review returns

* Parse currency values as string

* Jeremy's returns

* fix: scalars not properly implemented

* fix: filters not working on big float scalar

---------

Co-authored-by: Jérémy Magrin <jeremy.magrin@gmail.com>
This commit is contained in:
martmull
2023-11-23 15:26:59 +01:00
committed by GitHub
parent 0194f30dd8
commit 59e53ba72d
16 changed files with 139 additions and 29 deletions

View File

@ -7,6 +7,7 @@ import { gql } from 'graphql-tag';
import { DataSourceService } from 'src/metadata/data-source/data-source.service';
import { WorkspaceSchemaStorageService } from 'src/workspace/workspace-schema-storage/workspace-schema-storage.service';
import { ObjectMetadataService } from 'src/metadata/object-metadata/object-metadata.service';
import { ScalarsExplorerService } from 'src/workspace/services/ScalarsExplorer.service';
import { WorkspaceGraphQLSchemaFactory } from './workspace-schema-builder/workspace-graphql-schema.factory';
import { workspaceResolverBuilderMethodNames } from './workspace-resolver-builder/factories/factories';
@ -17,6 +18,7 @@ export class WorkspaceFactory {
constructor(
private readonly dataSourceService: DataSourceService,
private readonly objectMetadataService: ObjectMetadataService,
private readonly scalarsExplorerService: ScalarsExplorerService,
private readonly workspaceGraphQLSchemaFactory: WorkspaceGraphQLSchemaFactory,
private readonly workspaceResolverFactory: WorkspaceResolverFactory,
private readonly workspaceSchemaStorageService: WorkspaceSchemaStorageService,
@ -63,20 +65,28 @@ export class WorkspaceFactory {
let typeDefs = await this.workspaceSchemaStorageService.getTypeDefs(
workspaceId,
);
let usedScalarNames =
await this.workspaceSchemaStorageService.getUsedScalarNames(workspaceId);
// If typeDefs are not cached, generate them
if (!typeDefs) {
if (!typeDefs || !usedScalarNames) {
const autoGeneratedSchema =
await this.workspaceGraphQLSchemaFactory.create(
objectMetadataCollection,
workspaceResolverBuilderMethodNames,
);
usedScalarNames =
this.scalarsExplorerService.getUsedScalarNames(autoGeneratedSchema);
typeDefs = printSchema(autoGeneratedSchema);
await this.workspaceSchemaStorageService.setTypeDefs(
workspaceId,
typeDefs,
);
await this.workspaceSchemaStorageService.setUsedScalarNames(
workspaceId,
usedScalarNames,
);
}
const autoGeneratedResolvers = await this.workspaceResolverFactory.create(
@ -84,13 +94,17 @@ export class WorkspaceFactory {
objectMetadataCollection,
workspaceResolverBuilderMethodNames,
);
const scalarsResolvers =
this.scalarsExplorerService.getScalarResolvers(usedScalarNames);
// TODO: Cache the generate type definitions
const executableSchema = makeExecutableSchema({
typeDefs: gql`
${typeDefs}
`,
resolvers: autoGeneratedResolvers,
resolvers: {
...scalarsResolvers,
...autoGeneratedResolvers,
},
});
return executableSchema;