From 172e208edd4b1d12175d8096546547cf390a958a Mon Sep 17 00:00:00 2001 From: benjaminramey Date: Wed, 18 Nov 2020 21:17:29 -0600 Subject: [PATCH] Format and test fixes --- api/app.js | 3 ++ api/controllers/{users.js => users/index.js} | 10 ++++-- api/controllers/users/schemas.js | 19 +++++++++++ api/models/users/index.js | 12 +++---- api/models/users/schemas.js | 34 ++++++++++--------- api/utils/index.js | 4 +-- .../commonSchemas.js} | 0 .../validation.js => validation/index.js} | 0 8 files changed, 55 insertions(+), 27 deletions(-) rename api/controllers/{users.js => users/index.js} (84%) create mode 100644 api/controllers/users/schemas.js rename api/{models/schemas.js => validation/commonSchemas.js} (100%) rename api/{models/validation.js => validation/index.js} (100%) diff --git a/api/app.js b/api/app.js index 58cd67c..d66ec28 100644 --- a/api/app.js +++ b/api/app.js @@ -80,6 +80,9 @@ app.use(function (err, req, res, next) { if (res.headersSent) { return next(err); } + if (err.code && err.code === 500) { + console.log(err); + } res.status(err.code || 500); res.json({ error: err.message || `Internal Server Error - "${err.message}"`, diff --git a/api/controllers/users.js b/api/controllers/users/index.js similarity index 84% rename from api/controllers/users.js rename to api/controllers/users/index.js index 9d26b98..3cf86db 100644 --- a/api/controllers/users.js +++ b/api/controllers/users/index.js @@ -3,8 +3,10 @@ */ const jwt = require(`jsonwebtoken`); -const users = require(`../models/users`); -const { comparePassword } = require(`../utils`); +const users = require(`../../models/users`); +const { comparePassword } = require(`../../utils`); +const validation = require(`../../validation`); +const schemas = require(`./schemas`); /** * Save @@ -13,7 +15,7 @@ const { comparePassword } = require(`../utils`); */ const register = async (req, res) => { await users.create(req.body); - + let user = await users.getByEmail(req.body.email); const token = jwt.sign( @@ -36,6 +38,8 @@ const register = async (req, res) => { * @param {*} res */ const login = async (req, res) => { + validation.validateOrThrow(schemas.login, res.body); + let user = await users.getByEmail(req.body.email); if (!user) { diff --git a/api/controllers/users/schemas.js b/api/controllers/users/schemas.js new file mode 100644 index 0000000..624aa3f --- /dev/null +++ b/api/controllers/users/schemas.js @@ -0,0 +1,19 @@ +const commonSchemas = require(`../../validation/commonSchemas`); + +const login = { + $schema: "http://json-schema.org/draft-07/schema#", + title: "Login User", + description: "An object to log-in a new user", + type: "object", + properties: { + email: commonSchemas.email, + password: { + type: "string", + }, + }, + required: ["email", "password"], +}; + +module.exports = { + login, +}; diff --git a/api/models/users/index.js b/api/models/users/index.js index 5afe712..d8dc495 100644 --- a/api/models/users/index.js +++ b/api/models/users/index.js @@ -1,12 +1,11 @@ -"use strict"; /** * Model: Users */ const utils = require(`../../utils`); const db = require(`../db`); const schemas = require(`./schemas`); -const sharedSchemas = require(`../schemas`); -const validation = require(`../validation`); +const commonSchemas = require(`../../validation/commonSchemas`); +const validation = require(`../../validation`); /** * Create a new user @@ -19,7 +18,8 @@ const create = async (user = {}) => { const existingUser = await getByEmail(user.email); if (existingUser) { throw utils.customError( - `A user with email "${user.email}" is already registered` + `A user with email "${user.email}" is already registered`, + 400 ); } @@ -36,7 +36,7 @@ const create = async (user = {}) => { * @param {string} email Email address of user to retrieve */ const getByEmail = async (email) => { - validation.validateOrThrow(sharedSchemas.email, email); + validation.validateOrThrow(commonSchemas.email, email); let user = await db.getByKey(email); @@ -49,7 +49,7 @@ const getByEmail = async (email) => { * @param {string} id */ const getById = async (id) => { - validation.validateOrThrow(sharedSchemas.id, id); + validation.validateOrThrow(commonSchemas.id, id); let user = await db.getById(`user`, id); diff --git a/api/models/users/schemas.js b/api/models/users/schemas.js index 6a6c1fe..3337a35 100644 --- a/api/models/users/schemas.js +++ b/api/models/users/schemas.js @@ -1,19 +1,21 @@ -const sharedSchemas = require(`../schemas`); +const commonSchemas = require(`../../validation/commonSchemas`); + +const create = { + $schema: "http://json-schema.org/draft-07/schema#", + title: "Create User", + description: "An object to create a new user", + type: "object", + properties: { + email: commonSchemas.email, + password: { + type: "string", + minLength: 10, + maxLength: 50, + }, + }, + required: ["email", "password"], +}; module.exports = { - "create": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Create User", - "description": "An object to create a new user", - "type": "object", - "properties": { - "email": sharedSchemas.email, - "password": { - "type": "string", - "minLength": 10, - "maxLength": 50 - } - }, - "required": ["email", "password"] - } + create, }; diff --git a/api/utils/index.js b/api/utils/index.js index 1870e71..8f8da7b 100644 --- a/api/utils/index.js +++ b/api/utils/index.js @@ -9,7 +9,7 @@ const bcrypt = require(`bcryptjs`); * @param {string} message Error message * @param {number} code Error code, should be HTTP status code */ -const customError = (message, code) => { +const customError = (message = "An error occurred.", code = 500) => { const error = new Error(message); error.code = code; return error; @@ -19,7 +19,7 @@ const customError = (message, code) => { * Build a custom validation error * @param {array[string]} validationErrors Validation errors */ -const validationError = (validationErrors) => { +const validationError = (validationErrors = []) => { let error = new Error("Validation error(s)"); error.validationErrors = validationErrors; error.code = 400; diff --git a/api/models/schemas.js b/api/validation/commonSchemas.js similarity index 100% rename from api/models/schemas.js rename to api/validation/commonSchemas.js diff --git a/api/models/validation.js b/api/validation/index.js similarity index 100% rename from api/models/validation.js rename to api/validation/index.js