This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import fs from "fs";
|
||||
import { Service, ServiceBroker } from "moleculer";
|
||||
import ApiGateway from "moleculer-web";
|
||||
|
||||
@@ -46,9 +45,60 @@ export default class ApiService extends Service {
|
||||
},
|
||||
|
||||
{
|
||||
path: "/logs",
|
||||
use: [ApiGateway.serveStatic("logs")],
|
||||
path: "/acquisition-graphql",
|
||||
whitelist: ["acquisition-graphql.query"],
|
||||
cors: {
|
||||
origin: "*",
|
||||
methods: ["GET", "POST", "OPTIONS"],
|
||||
allowedHeaders: ["*"],
|
||||
credentials: false,
|
||||
maxAge: 3600,
|
||||
},
|
||||
aliases: {
|
||||
"POST /": async (req: any, res: any) => {
|
||||
try {
|
||||
const { query, variables, operationName } = req.body;
|
||||
const result = await req.$ctx.broker.call("acquisition-graphql.query", {
|
||||
query,
|
||||
variables,
|
||||
operationName,
|
||||
});
|
||||
res.setHeader("Content-Type", "application/json");
|
||||
res.end(JSON.stringify(result));
|
||||
} catch (error: any) {
|
||||
res.statusCode = 500;
|
||||
res.setHeader("Content-Type", "application/json");
|
||||
res.end(JSON.stringify({ errors: [{ message: error.message }] }));
|
||||
}
|
||||
},
|
||||
"GET /": async (req: any, res: any) => {
|
||||
try {
|
||||
const query = req.$params.query;
|
||||
const variables = req.$params.variables ? JSON.parse(req.$params.variables) : undefined;
|
||||
const operationName = req.$params.operationName;
|
||||
const result = await req.$ctx.broker.call("acquisition-graphql.query", {
|
||||
query,
|
||||
variables,
|
||||
operationName,
|
||||
});
|
||||
res.setHeader("Content-Type", "application/json");
|
||||
res.end(JSON.stringify(result));
|
||||
} catch (error: any) {
|
||||
res.statusCode = 500;
|
||||
res.setHeader("Content-Type", "application/json");
|
||||
res.end(JSON.stringify({ errors: [{ message: error.message }] }));
|
||||
}
|
||||
},
|
||||
},
|
||||
bodyParsers: { json: { strict: false, limit: "1MB" } },
|
||||
mappingPolicy: "restrict",
|
||||
logging: true,
|
||||
},
|
||||
|
||||
{
|
||||
path: "/logs",
|
||||
use: [ApiGateway.serveStatic("logs")],
|
||||
},
|
||||
],
|
||||
log4XXResponses: false,
|
||||
logRequestParams: true,
|
||||
|
||||
41
services/graphql.service.ts
Normal file
41
services/graphql.service.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { Service, ServiceBroker } from "moleculer";
|
||||
import { graphql, GraphQLSchema } from "graphql";
|
||||
import { makeExecutableSchema } from "@graphql-tools/schema";
|
||||
import { typeDefs } from "../models/graphql/typedef";
|
||||
import { resolvers } from "../models/graphql/resolvers";
|
||||
|
||||
export default class GraphQLService extends Service {
|
||||
private graphqlSchema!: GraphQLSchema;
|
||||
|
||||
public constructor(broker: ServiceBroker) {
|
||||
super(broker);
|
||||
this.parseServiceSchema({
|
||||
name: "acquisition-graphql",
|
||||
|
||||
actions: {
|
||||
query: {
|
||||
params: {
|
||||
query: "string",
|
||||
variables: { type: "object", optional: true },
|
||||
operationName: { type: "string", optional: true },
|
||||
},
|
||||
async handler(ctx: any) {
|
||||
const { query, variables, operationName } = ctx.params;
|
||||
return graphql({
|
||||
schema: this.graphqlSchema,
|
||||
source: query,
|
||||
variableValues: variables,
|
||||
operationName,
|
||||
contextValue: { broker: this.broker, ctx },
|
||||
});
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
started() {
|
||||
this.graphqlSchema = makeExecutableSchema({ typeDefs, resolvers });
|
||||
this.logger.info("Acquisition GraphQL service started");
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user