feat: Split v1 and v2 apis
This commit is contained in:
16
v1/src/apps/private/users/routes.js
Normal file
16
v1/src/apps/private/users/routes.js
Normal file
@@ -0,0 +1,16 @@
|
||||
'use strict';
|
||||
const router = require('express').Router();
|
||||
const services= require('./services.js');
|
||||
|
||||
router.get('/find', services.findList);
|
||||
|
||||
router.post('/member', services.postTeamMemberData);
|
||||
router.patch('/member/:id', services.patchTeamMemberProfileData);
|
||||
router.delete('/member/:id', services.deleteTeamMember);
|
||||
|
||||
router.get('/profile', services.getProfileData);
|
||||
router.patch('/profile', services.patchProfileData);
|
||||
|
||||
router.get('/:id', services.getById);
|
||||
|
||||
module.exports = router;
|
||||
177
v1/src/apps/private/users/services.js
Normal file
177
v1/src/apps/private/users/services.js
Normal file
@@ -0,0 +1,177 @@
|
||||
"use strict";
|
||||
const { ROOT_PATH, HANDLERS_PATH } = process.env;
|
||||
const { getUserById, findUsers, patchUserData, createUserWithinCompany, deleteUserWithinCompany } = require( "../../../lib/Handlers/Users.handler" );
|
||||
|
||||
const findList = async(req, res) => {
|
||||
try{
|
||||
const {
|
||||
total,
|
||||
limit,
|
||||
skip,
|
||||
data
|
||||
} = await findUsers( req.query );
|
||||
return res.send({
|
||||
total,
|
||||
limit,
|
||||
skip,
|
||||
data});
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
};
|
||||
|
||||
const getById = async(req, res) => {
|
||||
try{
|
||||
const id = req.params.id;
|
||||
const user = await getUserById( id );
|
||||
res.send({ user });
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
};
|
||||
|
||||
const getProfileData = async(req, res) => {
|
||||
res.send( req.context.user );
|
||||
};
|
||||
|
||||
const patchProfileData = async(req, res) => {
|
||||
try{
|
||||
const data = req.body;
|
||||
if( (data.email) && (data.email === req.context.user.email ) ){
|
||||
delete data.email;
|
||||
}
|
||||
if( req.body.job_role ){
|
||||
/// You can't change your own role
|
||||
delete data.job_role;
|
||||
}
|
||||
const user = await patchUserData( req.context.user.id , data );
|
||||
res.send( user );
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
};
|
||||
|
||||
function job_role_change_allowance( change_author_job_role , affected_job_role ){
|
||||
try{
|
||||
if( (change_author_job_role !== "owner") && (change_author_job_role !== "manager") ){
|
||||
return false;
|
||||
}
|
||||
|
||||
if( affected_job_role === "owner" ){
|
||||
return false;
|
||||
}
|
||||
|
||||
switch( affected_job_role ){
|
||||
case 'manager':
|
||||
case 'driver':
|
||||
case 'staff':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
}
|
||||
|
||||
const patchTeamMemberProfileData = async(req, res) => {
|
||||
try{
|
||||
const id = req.params.id;
|
||||
if( id === req.context.userId ){
|
||||
return await patchProfileData( req, res);
|
||||
}
|
||||
const companyId = req.context.companyId;
|
||||
if( !companyId ){
|
||||
return res.status(400).send( { error : "Not authorized to modify this user" } );
|
||||
}
|
||||
|
||||
/// If a job_role change is requested, validate with rules.
|
||||
if( ( req.body.job_role ) &&
|
||||
( !job_role_change_allowance( req.context.job_role , req.body.job_role ) )
|
||||
){
|
||||
return res.status(400).send( { error : "Not authorized to upgrade the role as requested" } );
|
||||
}
|
||||
|
||||
if( ( req.body.job_role ) && ( req.body.job_role === "driver" ) && (req.context.permissions !== "role_carrier" ) ){
|
||||
return res.status(400).send( { error : "Your company can not create drivers" } );
|
||||
}
|
||||
|
||||
if( (req.context.job_role !== "owner") && (req.context.job_role !== "manager") ){
|
||||
/// Only an owner or manager can modify a team member.
|
||||
return res.status(400).send( { error : "Your role does not allow to modify this user" } );
|
||||
}
|
||||
|
||||
/// No one can modify an "owner".
|
||||
const teamMember = await getUserById( id , { company : companyId , job_role : { $ne: "owner" } } );
|
||||
if( !teamMember ){
|
||||
return res.status(400).send( { error : "You can't modify users outside of your company" } );
|
||||
}
|
||||
|
||||
/// Apply change to user.
|
||||
const user_patch_result = await patchUserData( id , req.body );
|
||||
return res.send( user_patch_result );
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
};
|
||||
|
||||
const postTeamMemberData = async(req, res) => {
|
||||
try{
|
||||
const companyId = req.context.companyId;
|
||||
if( !companyId ){
|
||||
return res.status(400).send( { error : "Not authorized to create users" } );
|
||||
}
|
||||
|
||||
if( !req.body.job_role ){
|
||||
return res.status(400).send( { error : "job_role is mandatory!" } );
|
||||
}
|
||||
|
||||
if( ( req.body.job_role ) &&
|
||||
( !job_role_change_allowance( req.context.job_role , req.body.job_role ) )
|
||||
){
|
||||
return res.status(400).send( { error : "Not authorized to create the role as requested" } );
|
||||
}
|
||||
|
||||
if( (req.context.job_role !== "owner") && (req.context.job_role !== "manager") ){
|
||||
return res.status(400).send( { error : "Not authorized to create users" } );
|
||||
}
|
||||
|
||||
if( ( req.body.job_role ) && ( req.body.job_role === "driver" ) && (req.context.permissions !== "role_carrier" ) ){
|
||||
return res.status(400).send( { error : "Your company can not create drivers" } );
|
||||
}
|
||||
|
||||
if( !req.body.email ){
|
||||
return res.status(400).send( { error : "email is mandatory to create a new user" } );
|
||||
}
|
||||
/// Only an owner or manager can create a new user
|
||||
const teamMember = await createUserWithinCompany( companyId , req.body );
|
||||
return res.send( teamMember );
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
}
|
||||
|
||||
const deleteTeamMember = async(req, res) => {
|
||||
try{
|
||||
const user_to_remove_id = req.params.id;
|
||||
const manager_id = req.context.userId;
|
||||
|
||||
if( (req.context.job_role !== "owner") && (req.context.job_role !== "manager") ){
|
||||
return res.status(400).send( { error : "Not authorized to delete this user" } );
|
||||
}
|
||||
|
||||
const teamMember = await deleteUserWithinCompany( manager_id, user_to_remove_id );
|
||||
return res.send( teamMember );
|
||||
}catch( error ){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send( { error } );
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { findList , getById , getProfileData, patchProfileData, patchTeamMemberProfileData, postTeamMemberData , deleteTeamMember };
|
||||
Reference in New Issue
Block a user