From f04904c2363b3bcae48b549e04b3f1f5ac550c12 Mon Sep 17 00:00:00 2001 From: Nikola Bjelo Date: Thu, 11 Oct 2018 17:52:17 +0200 Subject: [PATCH] Cleaning it all a bit before the call (didn't heavy test this) --- server/src/createRemoteSchema.js | 9 ++++++- server/src/index.js | 42 ++++++++++++++------------------ server/src/links/index.js | 3 +++ server/src/links/teams.js | 27 ++++++++++++++++++++ 4 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 server/src/links/index.js create mode 100644 server/src/links/teams.js diff --git a/server/src/createRemoteSchema.js b/server/src/createRemoteSchema.js index ff3ca3fc1..7ae92a07c 100644 --- a/server/src/createRemoteSchema.js +++ b/server/src/createRemoteSchema.js @@ -35,7 +35,14 @@ export const createRemoteSchema = async (uri) => { } export const createTransformedRemoteSchema = async (prefix, uri) => { - const schema = await createRemoteSchema(uri) + var schema + try { + schema = await createRemoteSchema(uri) + } catch (error) { + console.log(`An error occured while fetching ${prefix} schema :`) + console.log(error) + return false + } const transformedSchema = transformSchema(schema, [ new RenameTypes((name) => prefix + capitalize(name)), new RenameRootFields((operation, name) => prefix + capitalize(name)) diff --git a/server/src/index.js b/server/src/index.js index 02252bba6..4a38d1c42 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -4,39 +4,33 @@ import 'dotenv/config' import { graphqlExpress, graphiqlExpress } from 'apollo-server-express' import { mergeSchemas } from 'graphql-tools' import { createTransformedRemoteSchema } from './createRemoteSchema' +import { teams } from './links' async function run () { const transformedTeamsSchema = await createTransformedRemoteSchema('TeamsModule', process.env.TEAMS_API_URL) const transformedUsersSchema = await createTransformedRemoteSchema('UsersModule', process.env.USERS_API_URL) const transformedKeyVaultSchema = await createTransformedRemoteSchema('KeyVaultModule', process.env.KEYVAULT_API_URL) - const linkSchemaDefs = - ` - extend type TeamsModuleTeam { - ownerUser: UsersModuleUser + var schemas = [] + var resolvers = {} + + if (transformedTeamsSchema) { + schemas.push(transformedTeamsSchema) + if (transformedUsersSchema) { + schemas.push(teams.linkSchemaDefs) + resolvers = Object.assign(resolvers, teams.resolver(transformedUsersSchema)) } - ` + } + if (transformedUsersSchema) { + schemas.push(transformedUsersSchema) + } + if (transformedKeyVaultSchema) { + schemas.push(transformedKeyVaultSchema) + } const schema = mergeSchemas({ - schemas: [transformedTeamsSchema, transformedUsersSchema, transformedKeyVaultSchema, linkSchemaDefs], - resolvers: { - TeamsModuleTeam: { - ownerUser: { - fragment: `fragment UserFragment on TeamsModuleTeam{owner}`, - resolve (parent, args, context, info) { - const authId = parent.owner - return info.mergeInfo.delegateToSchema({ - schema: transformedUsersSchema, - operation: 'query', - fieldName: 'UsersModuleUserByAuthId', - args: { authId }, - context, - info - }) - } - } - } - } + schemas, + resolvers }) const app = express() diff --git a/server/src/links/index.js b/server/src/links/index.js new file mode 100644 index 000000000..f08540fb7 --- /dev/null +++ b/server/src/links/index.js @@ -0,0 +1,3 @@ +import teams from './teams' + +export { teams } diff --git a/server/src/links/teams.js b/server/src/links/teams.js new file mode 100644 index 000000000..cfc823ada --- /dev/null +++ b/server/src/links/teams.js @@ -0,0 +1,27 @@ +export const linkSchemaDefs = + ` + extend type TeamsModuleTeam { + ownerUser: UsersModuleUser + } + ` + +export const resolver = (usersSchema) => ({ + TeamsModuleTeam: { + ownerUser: { + fragment: `fragment UserFragment on TeamsModuleTeam{owner}`, + resolve (parent, args, context, info) { + const authId = parent.owner + return info.mergeInfo.delegateToSchema({ + schema: usersSchema, + operation: 'query', + fieldName: 'UsersModuleUserByAuthId', + args: { authId }, + context, + info + }) + } + } + } +}) + +export default { resolver, linkSchemaDefs }