feat: Split v1 and v2 apis
This commit is contained in:
142
v1/src/apps/private/proposals/services.js
Normal file
142
v1/src/apps/private/proposals/services.js
Normal file
@@ -0,0 +1,142 @@
|
||||
"use strict";
|
||||
|
||||
const { getModel } = require( '../../../lib/Models' );
|
||||
const { getPagination } = require( '../../../lib/Misc' );
|
||||
const { GenericHandler } = require( '../../../lib/Handlers/Generic.handler' );
|
||||
const { onPatchEvent } = require('../../../lib/Handlers/Proposals.handler');
|
||||
const Model = getModel('proposals');
|
||||
|
||||
const populate_list = [
|
||||
{ path:'load' , populate : { path : 'categories' } },
|
||||
{ path:'load' , populate : { path : 'company' } },
|
||||
'shipper',
|
||||
'carrier',
|
||||
'vehicle',
|
||||
'bidder',
|
||||
'accepted_by'
|
||||
];
|
||||
const generic = new GenericHandler( Model, null, populate_list );
|
||||
|
||||
function getAndFilterList( query ){
|
||||
const filter_list = [];
|
||||
const { load, categories, branch_name, phone, city, state, truck_type } = query;
|
||||
|
||||
if( load ) { filter_list.push({ load }); }
|
||||
if( categories ) { filter_list.push({ categories }); }
|
||||
if( branch_name ) { filter_list.push({ branch_name }); }
|
||||
if( phone ) { filter_list.push({ phone }); }
|
||||
if( city ) { filter_list.push({ city }); }
|
||||
if( state ) { filter_list.push({ state }); }
|
||||
if( truck_type ) { filter_list.push({ truck_type }); }
|
||||
|
||||
if( filter_list.length == 0 ){
|
||||
return null;
|
||||
}
|
||||
return filter_list;
|
||||
}
|
||||
|
||||
async function findElements( query ){
|
||||
const { page, elements } = getPagination( query );
|
||||
const andFilterList = getAndFilterList( query );
|
||||
let filter;
|
||||
if( andFilterList ){
|
||||
filter = { $and : andFilterList };
|
||||
}else{
|
||||
filter = null;
|
||||
}
|
||||
const { total , limit, skip, data } = await generic.getList( page , elements, filter );
|
||||
return {
|
||||
total,
|
||||
limit,
|
||||
skip,
|
||||
data:data
|
||||
};
|
||||
}
|
||||
|
||||
async function findElementById( elementId , companyId ){
|
||||
const filter = {
|
||||
$and : [
|
||||
{ _id : elementId },
|
||||
{ $or :[
|
||||
{ shipper : companyId },
|
||||
{ carrier : companyId }
|
||||
]}
|
||||
]
|
||||
};
|
||||
let retVal = await Model.findOne( filter ).populate( populate_list ) || {};
|
||||
return retVal;
|
||||
}
|
||||
|
||||
const findList = async(req, res) => {
|
||||
try{
|
||||
const query = req.query || {};
|
||||
const retVal = await findElements( query );
|
||||
res.send( retVal );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
};
|
||||
|
||||
const getById = async(req, res) => {
|
||||
try{
|
||||
const companyId = req.context.companyId;
|
||||
const elementId = req.params.id;
|
||||
res.send( await findElementById( elementId , companyId ) );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
};
|
||||
|
||||
const patchProposal = async(req, res) => {
|
||||
try{
|
||||
const elementId = req.params.id;
|
||||
const proposal = await Model.findById( elementId );
|
||||
const data = req.body;
|
||||
if( !proposal ){
|
||||
throw "You can't modify this proposal";
|
||||
}
|
||||
if( !data ){
|
||||
throw "proposal data not sent";
|
||||
}
|
||||
await Model.findByIdAndUpdate( elementId , data );
|
||||
await onPatchEvent( elementId , data );
|
||||
return res.send( await Model.findById( elementId ) );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
};
|
||||
|
||||
const postProposal = async(req, res) => {
|
||||
try{
|
||||
const data = req.body;
|
||||
if( !data ){
|
||||
throw "proposal data not sent";
|
||||
}
|
||||
const proposal = new Model( data );
|
||||
await proposal.save();
|
||||
return res.send( proposal );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
};
|
||||
|
||||
const deleteProposal = async(req, res) => {
|
||||
try{
|
||||
const elementId = req.params.id;
|
||||
const proposal = await Model.findById( elementId );
|
||||
if(!proposal){
|
||||
throw "You can't delete this proposal";
|
||||
}
|
||||
await Model.findByIdAndDelete( elementId );
|
||||
return res.send(proposal);
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { findList, getById, patchProposal, postProposal, deleteProposal };
|
||||
Reference in New Issue
Block a user