From d71b24aa03fcd99e620fea5f9266b9c93e404060 Mon Sep 17 00:00:00 2001 From: Nikola Bjelo Date: Sat, 20 Oct 2018 04:55:04 +0200 Subject: [PATCH] Creating a "reorderRules" mutation --- server/src/schema/mutations/ReorderRules.js | 50 +++++++++++++++++++++ server/src/schema/mutations/index.js | 2 + 2 files changed, 52 insertions(+) create mode 100644 server/src/schema/mutations/ReorderRules.js diff --git a/server/src/schema/mutations/ReorderRules.js b/server/src/schema/mutations/ReorderRules.js new file mode 100644 index 000000000..3cf33fd4f --- /dev/null +++ b/server/src/schema/mutations/ReorderRules.js @@ -0,0 +1,50 @@ +import { + GraphQLNonNull, + GraphQLID, + GraphQLInt +} from 'graphql' +import { isBetween } from '../../utils/functions' +import { CompetitionType } from '../types' +import Competition from '../../models/competition' + +const args = { + competitionCodeName: { type: new GraphQLNonNull(GraphQLID) }, + fromNumber: { type: new GraphQLNonNull(GraphQLInt) }, + toNumber: { type: new GraphQLNonNull(GraphQLInt) } +} + +const resolve = (parent, { competitionCodeName, fromNumber, toNumber }, context) => { + // let authIdOnSession = context.user.sub + return new Promise((resolve, reject) => { + Competition.findOne({ codeName: competitionCodeName }).exec((err, competition) => { + if (err) reject(err) + else { + const delta = fromNumber > toNumber ? 1 : -1 + competition.rules.forEach((part) => { + if (part.number === fromNumber) { + part.number = toNumber + } else if (isBetween(part.number, fromNumber, toNumber)) { + part.number += delta + } + }) + + competition.save((err) => { + if (err) reject(err) + else { + resolve(competition) + } + }) + } + }) + }) +} + +const mutation = { + reorderRules: { + type: CompetitionType, + args, + resolve + } +} + +export default mutation diff --git a/server/src/schema/mutations/index.js b/server/src/schema/mutations/index.js index 12553d93e..a760dee03 100644 --- a/server/src/schema/mutations/index.js +++ b/server/src/schema/mutations/index.js @@ -8,6 +8,7 @@ import RegisterToCompetitionMutation from './RegisterToCompetition' import EditParticipantMutation from './EditParticipant' import AddRuleMutation from './AddRule' import EditRuleMutation from './EditRule' +import ReorderRulesMutation from './ReorderRules' import AddPrizeMutation from './AddPrize' const Mutation = new GraphQLObjectType({ @@ -19,6 +20,7 @@ const Mutation = new GraphQLObjectType({ EditParticipantMutation, AddRuleMutation, EditRuleMutation, + ReorderRulesMutation, AddPrizeMutation ) })