From ae9e2c34709bba1189b7dbf2aa62735effeab052 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Mon, 23 Dec 2019 16:54:27 -0500 Subject: [PATCH] remove PayloadError and switched to APIError where it was used, set res status where possible and some fixed eslint issues --- demo/User/User.validate.js | 6 +++--- package.json | 1 + src/errors/APIError.js | 4 +--- src/errors/DuplicateCollection.js | 4 ++-- src/errors/DuplicateGlobal.js | 4 ++-- src/errors/ExistingUser.js | 6 +++--- src/errors/MissingCollectionLabel.js | 4 ++-- src/errors/MissingGlobalLabel.js | 4 ++-- src/errors/NotFound.js | 7 ++++--- src/errors/PayloadError.js | 6 ------ src/errors/index.js | 2 +- src/globals/requestHandlers.js | 9 +++++---- src/mongoose/requestHandlers/create.js | 2 +- src/mongoose/requestHandlers/findOne.js | 6 ++---- src/mongoose/requestHandlers/query.js | 8 ++++---- src/mongoose/resolvers/create.js | 6 ++++-- src/mongoose/resolvers/find.js | 7 ++++--- src/mongoose/resolvers/findOne.js | 8 +++++--- src/mongoose/resolvers/index.js | 4 ++-- src/mongoose/resolvers/modelById.js | 13 +++++++------ 20 files changed, 55 insertions(+), 56 deletions(-) delete mode 100644 src/errors/PayloadError.js diff --git a/demo/User/User.validate.js b/demo/User/User.validate.js index 17fb8736d0..4c978b34e9 100644 --- a/demo/User/User.validate.js +++ b/demo/User/User.validate.js @@ -6,7 +6,7 @@ module.exports = { post: validate({ body: { email: Joi.string().email().required(), - password: Joi.string().required() - } - }) + password: Joi.string().required(), + }, + }), }; diff --git a/package.json b/package.json index 2a489b6ae5..4de3fde536 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "@babel/preset-react": "^7.0.0", "@babel/register": "^7.6.2", "@babel/runtime": "^7.6.2", + "@babel/types": "^7.2.3", "autoprefixer": "^9.6.1", "axios": "^0.18.1", "babel-core": "^7.0.0-bridge.0", diff --git a/src/errors/APIError.js b/src/errors/APIError.js index 9a4705eccf..3d1adfa21b 100644 --- a/src/errors/APIError.js +++ b/src/errors/APIError.js @@ -19,7 +19,7 @@ class ExtendableError extends Error { * Class representing an API error. * @extends ExtendableError */ -class APIError extends ExtendableError { +export class APIError extends ExtendableError { /** * Creates an API error. * @param {string} message - Error message. @@ -30,5 +30,3 @@ class APIError extends ExtendableError { super(message, status, isPublic); } } - -module.exports = APIError; diff --git a/src/errors/DuplicateCollection.js b/src/errors/DuplicateCollection.js index a2451a71b6..ebff5fb6ed 100644 --- a/src/errors/DuplicateCollection.js +++ b/src/errors/DuplicateCollection.js @@ -1,6 +1,6 @@ -import { PayloadError } from './PayloadError'; +import { APIError } from './APIError'; -export class DuplicateCollection extends PayloadError { +export class DuplicateCollection extends APIError { constructor(config) { super(`Collection name "${config.labels.singular}" is already in use`); } diff --git a/src/errors/DuplicateGlobal.js b/src/errors/DuplicateGlobal.js index ce4d0a941b..d8946e90a2 100644 --- a/src/errors/DuplicateGlobal.js +++ b/src/errors/DuplicateGlobal.js @@ -1,6 +1,6 @@ -import { PayloadError } from './PayloadError'; +import { APIError } from './APIError'; -export class DuplicateGlobal extends PayloadError { +export class DuplicateGlobal extends APIError { constructor(config) { super(`Global label "${config.label}" is already in use`); } diff --git a/src/errors/ExistingUser.js b/src/errors/ExistingUser.js index a42ea60bc8..d24b002fdb 100644 --- a/src/errors/ExistingUser.js +++ b/src/errors/ExistingUser.js @@ -1,7 +1,7 @@ -import { PayloadError } from './PayloadError'; +import { APIError } from './APIError'; -export class ExistingUser extends PayloadError { +export class ExistingUser extends APIError { constructor(config) { - super(`Error when registering ${config.labels.singular}: a user model already exists.`); + super(`Error when registering "${ config.labels.singular }": a user model already exists.`); } } diff --git a/src/errors/MissingCollectionLabel.js b/src/errors/MissingCollectionLabel.js index d37b7eee3f..b9a5ef02f2 100644 --- a/src/errors/MissingCollectionLabel.js +++ b/src/errors/MissingCollectionLabel.js @@ -1,6 +1,6 @@ -import { PayloadError } from './PayloadError'; +import { APIError } from './APIError'; -export class MissingCollectionLabel extends PayloadError { +export class MissingCollectionLabel extends APIError { constructor(config) { super('payload.config.collection object is missing label'); } diff --git a/src/errors/MissingGlobalLabel.js b/src/errors/MissingGlobalLabel.js index 4567850458..eb5d3a5aff 100644 --- a/src/errors/MissingGlobalLabel.js +++ b/src/errors/MissingGlobalLabel.js @@ -1,6 +1,6 @@ -import { PayloadError } from './PayloadError'; +import { APIError } from './APIError'; -export class MissingGlobalLabel extends PayloadError { +export class MissingGlobalLabel extends APIError { constructor(config) { super(`${config.globals} object is missing label`); } diff --git a/src/errors/NotFound.js b/src/errors/NotFound.js index d4bc4520a3..48e90d0900 100644 --- a/src/errors/NotFound.js +++ b/src/errors/NotFound.js @@ -1,7 +1,8 @@ -import { PayloadError } from './PayloadError'; +import httpStatus from 'http-status'; +import { APIError } from './APIError'; -export class NotFound extends PayloadError { +export class NotFound extends APIError { constructor() { - super('Not found.'); + super('Not found.', httpStatus.NOT_FOUND); } } diff --git a/src/errors/PayloadError.js b/src/errors/PayloadError.js deleted file mode 100644 index 00daa108e7..0000000000 --- a/src/errors/PayloadError.js +++ /dev/null @@ -1,6 +0,0 @@ -export class PayloadError extends Error { - constructor(message) { - super(message); - Error.captureStackTrace(this, this.constructor); - } -} diff --git a/src/errors/index.js b/src/errors/index.js index aceca1f1d3..38cafcec1c 100644 --- a/src/errors/index.js +++ b/src/errors/index.js @@ -1,4 +1,4 @@ -export { PayloadError } from './PayloadError'; +export { APIError } from './APIError'; export { DuplicateCollection } from './DuplicateCollection'; export { DuplicateGlobal } from './DuplicateGlobal'; export { MissingCollectionLabel } from './MissingCollectionLabel'; diff --git a/src/globals/requestHandlers.js b/src/globals/requestHandlers.js index 5e43e8a47b..a1bca21f0d 100644 --- a/src/globals/requestHandlers.js +++ b/src/globals/requestHandlers.js @@ -4,10 +4,11 @@ import { createAutopopulateOptions } from '../mongoose/createAutopopulateOptions export const upsert = (req, res) => { if (!req.model.schema.tree[req.params.slug]) { - return res.status(httpStatus.NOT_FOUND).json({ error: 'not found' }); + res.status(httpStatus.NOT_FOUND).json({ error: 'not found' }); + return; } - req.model.findOne({}, (err, doc) => { + req.model.findOne({}, (findErr, doc) => { let global = {}; if (!doc) { @@ -16,8 +17,8 @@ export const upsert = (req, res) => { } else { global = req.body; } - return req.model.create(global, (err, result) => { - if (err) return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({ error: err }); + return req.model.create(global, (createErr, result) => { + if (createErr) return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({ error: createErr }); return res.status(httpStatus.CREATED) .json({ diff --git a/src/mongoose/requestHandlers/create.js b/src/mongoose/requestHandlers/create.js index 695a4780cc..881ca602f1 100644 --- a/src/mongoose/requestHandlers/create.js +++ b/src/mongoose/requestHandlers/create.js @@ -8,7 +8,7 @@ const create = (req, res) => { return res.status(httpStatus.CREATED) .json({ message: 'success', - result: result.toJSON({ virtuals: true }) + result: result.toJSON({ virtuals: true }), }); }); }; diff --git a/src/mongoose/requestHandlers/findOne.js b/src/mongoose/requestHandlers/findOne.js index 87535c6aff..df1f4ca28e 100644 --- a/src/mongoose/requestHandlers/findOne.js +++ b/src/mongoose/requestHandlers/findOne.js @@ -1,20 +1,18 @@ -import httpStatus from 'http-status'; import { modelById } from '../resolvers'; import { createAutopopulateOptions } from '../createAutopopulateOptions'; const findOne = (req, res) => { - const query = { Model: req.model, id: req.params.id, locale: req.locale, fallback: req.query['fallback-locale'], - depth: req.query.depth + depth: req.query.depth, }; modelById(query, createAutopopulateOptions(query)) .then(doc => res.json(doc)) - .catch(err => res.status(httpStatus.INTERNAL_SERVER_ERROR).json({ error: err })); + .catch(err => res.status(err.status).json({ error: err })); }; export default findOne; diff --git a/src/mongoose/requestHandlers/query.js b/src/mongoose/requestHandlers/query.js index 68b262ae16..e01033a213 100644 --- a/src/mongoose/requestHandlers/query.js +++ b/src/mongoose/requestHandlers/query.js @@ -8,15 +8,15 @@ const query = (req, res) => { } return res.json({ ...result, - docs: result.docs.map(doc => { + docs: result.docs.map((doc) => { if (req.locale && doc.setLocale) { doc.setLocale(req.locale, req.query['fallback-locale']); } - return doc.toJSON({ virtuals: true }) - }) + return doc.toJSON({ virtuals: true }); + }), }); - }) + }); }; export default query; diff --git a/src/mongoose/resolvers/create.js b/src/mongoose/resolvers/create.js index ea07d6ea9f..be030b191d 100644 --- a/src/mongoose/resolvers/create.js +++ b/src/mongoose/resolvers/create.js @@ -1,10 +1,12 @@ +import { APIError } from '../../errors'; -const create = query => { +const create = (query) => { return new Promise((resolve, reject) => { query.Model.create(query.input, (err, doc) => { console.log(err, doc); if (err || !doc) { - return reject({message: err}) + reject(new APIError(err)); + return; } resolve(doc); }); diff --git a/src/mongoose/resolvers/find.js b/src/mongoose/resolvers/find.js index 4e44e5efc2..603327f422 100644 --- a/src/mongoose/resolvers/find.js +++ b/src/mongoose/resolvers/find.js @@ -1,16 +1,17 @@ +import { NotFound } from '../../errors'; + const find = (query) => { return new Promise((resolve, reject) => { query.Model.find({}, (err, docs) => { if (err || !docs) { - return reject({ message: 'not found' }); + reject(new NotFound()); } let result = docs; if (query.locale) { docs.setLocale(query.locale, query.fallback); - const json = docs.toJSON({ virtuals: true }); - result = json; + result = docs.toJSON({ virtuals: true }); } resolve(result); diff --git a/src/mongoose/resolvers/findOne.js b/src/mongoose/resolvers/findOne.js index 3ad1df99ec..a3ab9c0803 100644 --- a/src/mongoose/resolvers/findOne.js +++ b/src/mongoose/resolvers/findOne.js @@ -1,16 +1,18 @@ +import NotFound from '../../errors'; + const find = ({ Model, locale, fallback }) => { return new Promise((resolve, reject) => { Model.findOne(null, (err, doc) => { if (err || !doc) { - return reject({ message: 'not found' }); + console.log('ok'); + reject(new NotFound()); } let result = doc; if (locale) { doc.setLocale(locale, fallback); - const json = doc.toJSON({ virtuals: true }); - result = json; + result = doc.toJSON({ virtuals: true }); } resolve(result); diff --git a/src/mongoose/resolvers/index.js b/src/mongoose/resolvers/index.js index 034e5129ee..092f8816ee 100644 --- a/src/mongoose/resolvers/index.js +++ b/src/mongoose/resolvers/index.js @@ -7,5 +7,5 @@ export { modelById, find, findOne, - create -} + create, +}; diff --git a/src/mongoose/resolvers/modelById.js b/src/mongoose/resolvers/modelById.js index 486d818185..6a903e13f2 100644 --- a/src/mongoose/resolvers/modelById.js +++ b/src/mongoose/resolvers/modelById.js @@ -1,24 +1,25 @@ -const modelById = (query, options) => { +import { NotFound } from '../../errors'; +const modelById = (query, options) => { return new Promise((resolve, reject) => { query.Model.findOne({ _id: query.id }, {}, options, (err, doc) => { - if (err || !doc) { - return reject({ message: 'not found' }) + reject(new NotFound()); + return; } let result = doc; if (query.locale) { - doc.setLocale && doc.setLocale(query.locale, query.fallback); + if (doc.setLocale) doc.setLocale(query.locale, query.fallback); result = doc.toJSON({ virtuals: true }); } resolve(options.returnRawDoc ? doc : result); - }) - }) + }); + }); }; export default modelById;