Refactor with base actions methods

This commit is contained in:
2021-01-25 23:28:04 -06:00
parent 5f23b5b633
commit 9d98ad4e84
11 changed files with 204 additions and 222 deletions

View File

@@ -2,11 +2,9 @@
* Controllers: Users
*/
const jwt = require(`jsonwebtoken`);
const users = require(`../../models/users`);
const { comparePassword } = require(`../../utils`);
const validation = require(`../../validation`);
const schemas = require(`./schemas`);
const base = require(`../base`);
const userUtils = require(`./utils`);
/**
* Save
@@ -14,22 +12,24 @@ const schemas = require(`./schemas`);
* @param {*} res
*/
const register = async (req, res) => {
await users.create(req.body);
let user = await users.getByEmail(req.body.email);
const token = jwt.sign(
users.convertToPublicFormat(user),
process.env.tokenSecret,
{
expiresIn: 604800, // 1 week
const config = {
validationSchema: schemas.create,
getObjectKey: () => req.body.email,
buildDbObject: () => {
return {
hk: req.body.email,
password: userUtils.hashPassword(req.body.password)
};
},
dbKind: `user`,
buildResponseBody: createdUser => {
return {
message: `Authentication successful`,
token: userUtils.getToken(createdUser),
};
}
);
res.json({
message: `Authentication successful`,
token,
});
};
await base.createAction(req, res, config);
};
/**
@@ -38,35 +38,26 @@ const register = async (req, res) => {
* @param {*} res
*/
const login = async (req, res) => {
validation.validateOrThrow(schemas.login, req.body);
let user = await users.getByEmail(req.body.email);
if (!user) {
return res
.status(404)
.send({ error: `Authentication failed. User not found.` });
}
const isCorrect = comparePassword(req.body.password, user.password);
if (!isCorrect) {
return res
.status(401)
.send({ error: `Authentication failed. Wrong password.` });
}
const token = jwt.sign(
users.convertToPublicFormat(user),
process.env.tokenSecret,
{
expiresIn: 604800, // 1 week
const config = {
validationSchema: schemas.login,
getObjectKey: () => req.body.email,
notFoundMessage: `Authentication failed. User not found.`,
buildResponseBody: user => {
const isCorrect = userUtils.comparePassword(req.body.password, user.password);
if (!isCorrect) {
return res
.status(401)
.send({ error: `Authentication failed. Wrong password.` });
}
return {
message: `Authentication successful`,
token: userUtils.getToken(user),
};
}
);
};
res.json({
message: `Authentication successful`,
token,
});
await base.getByKeyAction(req, res, config);
};
/**
@@ -75,7 +66,7 @@ const login = async (req, res) => {
* @param {*} res
*/
const get = async (req, res) => {
const user = users.convertToPublicFormat(req.user);
const user = userUtils.convertToPublicFormat(req.user);
res.json({ user });
};