From 5cdaca4a6df3bc7606fa0239b9e3a70fe08dcded Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 3 Jul 2019 20:13:25 -0300 Subject: [PATCH] Add and remove clones from ecosystem --- server/src/graphQLCalls/addBotMutation.js | 35 +++++++++++++++++++ server/src/graphQLCalls/ecosystemQuery.js | 2 +- server/src/graphQLCalls/removeBotMutation.js | 35 +++++++++++++++++++ .../src/schema/mutations/AddCloneMutation.js | 27 ++++++++++++-- .../schema/mutations/RemoveCloneMutation.js | 30 +++++++++++++--- 5 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 server/src/graphQLCalls/addBotMutation.js create mode 100644 server/src/graphQLCalls/removeBotMutation.js diff --git a/server/src/graphQLCalls/addBotMutation.js b/server/src/graphQLCalls/addBotMutation.js new file mode 100644 index 000000000..e69cb6696 --- /dev/null +++ b/server/src/graphQLCalls/addBotMutation.js @@ -0,0 +1,35 @@ +import logger from '../config/logger' +import axios from 'axios' + +const addBotMutation = async (authorization, bot) => { + logger.debug('addBotMutation -> Entering function.') + + let response = await axios({ + url: process.env.GATEWAY_ENDPOINT, + method: 'post', + data: { + query: ` + mutation web_AddBot($bot: web_BotInput){ + web_AddBot(bot: $bot){ + codeName + cloneId + } + } + `, + variables: { + bot + } + }, + headers: { + authorization: authorization + } + }) + + if (response.data.errors) { + throw response.data.errors + } + + return response.data.data.web_AddBot +} + +export default addBotMutation diff --git a/server/src/graphQLCalls/ecosystemQuery.js b/server/src/graphQLCalls/ecosystemQuery.js index 9c1e637c0..1c645e652 100644 --- a/server/src/graphQLCalls/ecosystemQuery.js +++ b/server/src/graphQLCalls/ecosystemQuery.js @@ -31,7 +31,7 @@ const ecosystemQuery = async (authorization) => { }) if (response.data.errors) { - throw error + throw response.data.errors } return response.data.data.web_GetEcosystem diff --git a/server/src/graphQLCalls/removeBotMutation.js b/server/src/graphQLCalls/removeBotMutation.js new file mode 100644 index 000000000..42872ba92 --- /dev/null +++ b/server/src/graphQLCalls/removeBotMutation.js @@ -0,0 +1,35 @@ +import logger from '../config/logger' +import axios from 'axios' + +const removeBotMutation = async (authorization, bot) => { + logger.debug('removeBotMutation -> Entering function.') + + let response = await axios({ + url: process.env.GATEWAY_ENDPOINT, + method: 'post', + data: { + query: ` + mutation web_RemoveBot($bot: web_BotInput){ + web_RemoveBot(bot: $bot){ + codeName + cloneId + } + } + `, + variables: { + bot + } + }, + headers: { + authorization: authorization + } + }) + + if (response.data.errors) { + throw response.data.errors + } + + return response.data.data.web_RemoveBot +} + +export default removeBotMutation diff --git a/server/src/schema/mutations/AddCloneMutation.js b/server/src/schema/mutations/AddCloneMutation.js index a50822e89..41dd97cf3 100644 --- a/server/src/schema/mutations/AddCloneMutation.js +++ b/server/src/schema/mutations/AddCloneMutation.js @@ -1,10 +1,10 @@ import { CloneInputType } from '../types/input' import { CloneType } from '../types' import { Clone } from '../../models' -import { CloneModeEnum } from '../../enums/CloneMode' import { BotTypesEnum } from '../../enums/BotTypes' import teamQuery from '../../graphQLCalls/teamQuery' import authorizeKey from '../../graphQLCalls/authorizeKey' +import addBotMutation from '../../graphQLCalls/addBotMutation' import cloneDetails from '../cloneDetails' import { AuthenticationError, @@ -15,7 +15,8 @@ import { import logger from '../../config/logger' import createKubernetesClone from '../../kubernetes/createClone' import { isDefined } from '../../config/utils' -import { LIVE, COMPETITION } from '../../enums/CloneMode' +import { CloneModeEnum, LIVE, COMPETITION, BACKTEST } from '../../enums/CloneMode' +import { Trading } from '../../enums/BotTypes' const args = { clone: { type: CloneInputType } @@ -93,6 +94,28 @@ const resolve = async (parent, { clone }, context) => { await createKubernetesClone(clone) + if(clone.botType === Trading){ + let productCodeName + if(clone.mode === LIVE){ + productCodeName = 'Live Trading History' + } + if(clone.mode === COMPETITION){ + productCodeName = 'Competition Trading History' + } + if(clone.mode === BACKTEST){ + productCodeName = 'Backtest Trading History' + } + + let newEcosystemBot = { + devTeam: clone.teamSlug, + codeName: clone.botSlug, + cloneId: clone.id, + productCodeName + } + + await addBotMutation(context.authorization, newEcosystemBot) + } + logger.debug('addClone -> Clone created sucessfully.') return savedClone } catch (err) { diff --git a/server/src/schema/mutations/RemoveCloneMutation.js b/server/src/schema/mutations/RemoveCloneMutation.js index 63edf3ce3..a9f7dd8a0 100644 --- a/server/src/schema/mutations/RemoveCloneMutation.js +++ b/server/src/schema/mutations/RemoveCloneMutation.js @@ -7,11 +7,11 @@ import teamQuery from '../../graphQLCalls/teamQuery' import { isDefined } from '../../config/utils' import cloneDetails from '../cloneDetails' import authorizeKey from '../../graphQLCalls/authorizeKey' -import { LIVE, COMPETITION } from '../../enums/CloneMode' +import { LIVE, COMPETITION, BACKTEST } from '../../enums/CloneMode' +import { Trading } from '../../enums/BotTypes' +import removeBotMutation from '../../graphQLCalls/removeBotMutation' -const args = { - id: { type: new GraphQLNonNull(GraphQLID) } -} +const args = { id: { type: new GraphQLNonNull(GraphQLID) } } const resolve = async (parent, { id }, context) => { logger.debug('removeClone -> Entering Fuction.') @@ -42,6 +42,28 @@ const resolve = async (parent, { id }, context) => { logger.debug('removeClone -> Removing Clone from Kubernates.') await removeKuberneteClone(clone.id) + if (clone.botType === Trading) { + let productCodeName + if (clone.mode === LIVE) { + productCodeName = 'Live Trading History' + } + if (clone.mode === COMPETITION) { + productCodeName = 'Competition Trading History' + } + if (clone.mode === BACKTEST) { + productCodeName = 'Backtest Trading History' + } + + let newEcosystemBot = { + devTeam: clone.teamSlug, + codeName: clone.botSlug, + cloneId: clone.id, + productCodeName + } + + await removeBotMutation(context.authorization, newEcosystemBot) + } + const query = { _id: id, authId: context.userId