diff --git a/server/package.json b/server/package.json index 230811b45..2a4ca2256 100644 --- a/server/package.json +++ b/server/package.json @@ -9,6 +9,11 @@ "start": "nodemon --exec babel-node --presets env,stage-2 src/index.js", "test": "echo \"Error: no test specified\" && exit 1" }, + "standard": { + "ignore": [ + "/src/errors/index.js" + ] + }, "devDependencies": { "babel-cli": "^6.26.0", "babel-preset-env": "^1.7.0", diff --git a/server/src/errors/index.js b/server/src/errors/index.js index eb000c4ee..cfb70457e 100644 --- a/server/src/errors/index.js +++ b/server/src/errors/index.js @@ -1,4 +1,14 @@ export class AuthentificationError extends Error { code = 401 - message = 'You have to be authentificated to ' + ( this.message || "perform this action") + message = 'Autentification not found, you have to be authentificated to perform this action' +} + +export class DatabaseError extends Error { + code = 404 + message = 'Ressource not found : ' + this.message +} + +export class WrongArgumentsError extends Error { + code = 400 + message = 'Wrong arguments : ' + this.message } diff --git a/server/src/schema/mutations/AddPrize.js b/server/src/schema/mutations/AddPrize.js index 620442ab6..03e79b7c4 100644 --- a/server/src/schema/mutations/AddPrize.js +++ b/server/src/schema/mutations/AddPrize.js @@ -3,7 +3,11 @@ import { GraphQLID, GraphQLInt } from 'graphql' -import { AuthentificationError } from '../../errors' +import { + AuthentificationError, + DatabaseError, + WrongArgumentsError +} from '../../errors' import { EventType } from '../types' import { Event } from '../../models' @@ -20,12 +24,13 @@ const resolve = (parent, { eventDesignator, rank, amount }, context) => { } return new Promise((resolve, reject) => { Event.findOne({ designator: eventDesignator, hostId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { if (event.prizes.some(prize => prize.rank === rank)) { - // need to add an error message here TODO - resolve(event) + reject(new WrongArgumentsError('A prize for that rank already exists')) } else { event.prizes.push({ rank, diff --git a/server/src/schema/mutations/AddRule.js b/server/src/schema/mutations/AddRule.js index b3183fb6c..6968ab4e9 100644 --- a/server/src/schema/mutations/AddRule.js +++ b/server/src/schema/mutations/AddRule.js @@ -3,7 +3,11 @@ import { GraphQLID, GraphQLString } from 'graphql' -import { AuthentificationError } from '../../errors' +import { + AuthentificationError, + DatabaseError, + WrongArgumentsError +} from '../../errors' import { EventType } from '../types' import { Event } from '../../models' @@ -20,11 +24,13 @@ const resolve = (parent, { eventDesignator, title, description }, context) => { } return new Promise((resolve, reject) => { Event.findOne({ designator: eventDesignator, hostId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { if (event.rules.some(rule => rule.title === title)) { - resolve(event) + reject(new WrongArgumentsError('A prize for that rank already exists')) } else { let position = 1 while (event.rules.some(rule => rule.position === position)) { diff --git a/server/src/schema/mutations/CreateAndSetFormula.js b/server/src/schema/mutations/CreateAndSetFormula.js index f8e145a22..21f631a1b 100644 --- a/server/src/schema/mutations/CreateAndSetFormula.js +++ b/server/src/schema/mutations/CreateAndSetFormula.js @@ -2,7 +2,7 @@ import { GraphQLNonNull, GraphQLString } from 'graphql' -import { AuthentificationError } from '../../errors' +import { AuthentificationError, DatabaseError } from '../../errors' import { EventType } from '../types' import { Event, Formula } from '../../models' @@ -19,8 +19,10 @@ const resolve = (parent, { name, eventDesignator }, context) => { let newFormula = new Formula({ name, ownerId }) return new Promise((resolve, reject) => { Event.findOne({ designator: eventDesignator, hostId: ownerId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { newFormula.save((err) => { if (err) reject(err) diff --git a/server/src/schema/mutations/CreateAndSetPlotter.js b/server/src/schema/mutations/CreateAndSetPlotter.js index 75d518614..98aa2e7e4 100644 --- a/server/src/schema/mutations/CreateAndSetPlotter.js +++ b/server/src/schema/mutations/CreateAndSetPlotter.js @@ -2,7 +2,7 @@ import { GraphQLNonNull, GraphQLString } from 'graphql' -import { AuthentificationError } from '../../errors' +import { AuthentificationError, DatabaseError } from '../../errors' import { EventType } from '../types' import { Event, Plotter } from '../../models' @@ -22,8 +22,10 @@ const resolve = (parent, { name, host, repo, moduleName, eventDesignator }, cont let newPlotter = new Plotter({ name, host, repo, moduleName, ownerId }) return new Promise((resolve, reject) => { Event.findOne({ designator: eventDesignator, hostId: ownerId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { newPlotter.save((err) => { if (err) reject(err) diff --git a/server/src/schema/mutations/EditEvent.js b/server/src/schema/mutations/EditEvent.js index f36fa26f9..de5271efb 100644 --- a/server/src/schema/mutations/EditEvent.js +++ b/server/src/schema/mutations/EditEvent.js @@ -4,7 +4,7 @@ import { GraphQLInt, GraphQLString } from 'graphql' -import { AuthentificationError } from '../../errors' +import { AuthentificationError, DatabaseError } from '../../errors' import { EventType } from '../types' import { Event } from '../../models' @@ -25,8 +25,10 @@ const resolve = (parent, { designator, name, description, startDatetime, finishD } return new Promise((resolve, reject) => { Event.findOne({ designator, hostId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { event.name = name || event.name event.description = description || event.description diff --git a/server/src/schema/mutations/EditRule.js b/server/src/schema/mutations/EditRule.js index 1821d8aeb..5b3113edf 100644 --- a/server/src/schema/mutations/EditRule.js +++ b/server/src/schema/mutations/EditRule.js @@ -3,7 +3,7 @@ import { GraphQLID, GraphQLString } from 'graphql' -import { AuthentificationError } from '../../errors' +import { AuthentificationError, DatabaseError } from '../../errors' import { EventType } from '../types' import { Event } from '../../models' @@ -21,8 +21,10 @@ const resolve = (parent, { eventDesignator, title, newtitle, description }, cont } return new Promise((resolve, reject) => { Event.findOne({ designator: eventDesignator, hostId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { let ruleIndex event.rules.find((rule, index) => { diff --git a/server/src/schema/mutations/ReorderRules.js b/server/src/schema/mutations/ReorderRules.js index 00846507e..0a29865d4 100644 --- a/server/src/schema/mutations/ReorderRules.js +++ b/server/src/schema/mutations/ReorderRules.js @@ -3,7 +3,7 @@ import { GraphQLID, GraphQLInt } from 'graphql' -import { AuthentificationError } from '../../errors' +import { AuthentificationError, DatabaseError } from '../../errors' import { isBetween } from '../../utils/functions' import { EventType } from '../types' import { Event } from '../../models' @@ -21,8 +21,10 @@ const resolve = (parent, { eventDesignator, fromPosition, toPosition }, context) } return new Promise((resolve, reject) => { Event.findOne({ designator: eventDesignator, hostId: context.userId }).exec((err, event) => { - if (err || !event) { + if (err) { reject(err) + } else if (!event) { + reject(new DatabaseError('None of the events you own respond to that designator')) } else { const delta = fromPosition > toPosition ? 1 : -1 event.rules.forEach((part) => {