feat: Adding load-templates endpoint
This commit is contained in:
31
v1/README.md
31
v1/README.md
@@ -84,7 +84,7 @@ Public resources:
|
||||
Private resources:
|
||||
|
||||
- Company and members: `/companies`, `/users`
|
||||
- Operations: `/loads`, `/proposals`, `/vehicles`, `/branches`, `/budgets`
|
||||
- Operations: `/loads`, `/load-templates`, `/proposals`, `/vehicles`, `/branches`, `/budgets`
|
||||
- Files and alerts: `/load-attachments`, `/notifications`
|
||||
- Company private list: `/groups`
|
||||
|
||||
@@ -308,6 +308,7 @@ Get public fields from registered vehicles.
|
||||
The following list of endpoints requires a JWT.
|
||||
|
||||
- `GET /loads`: List loads related to my company.
|
||||
- `GET /load-templates/all`: List load templates from my company.
|
||||
- `GET /load-attachments`: List load attachments related to my company or load id.
|
||||
- `GET /groups/private`: Get the private group for my company.
|
||||
|
||||
@@ -445,6 +446,34 @@ This endpoint is part of /loads endpoint
|
||||
- `GET /:id` : Get attachment file.
|
||||
- `GET /` : Get attachment list from company.
|
||||
|
||||
### /load-templates
|
||||
|
||||
- `POST /new` : Create a new load template for my company.
|
||||
- `GET /all` : Get all load templates from my company.
|
||||
- `GET /:id` : Get a single load template by id.
|
||||
- `PATCH /:id` : Update a load template by id.
|
||||
- `DELETE /:id` : Delete a load template by id.
|
||||
|
||||
Fields accepted for create/update:
|
||||
|
||||
- template_name
|
||||
- alert_list
|
||||
- origin_warehouse
|
||||
- destination_warehouse
|
||||
- origin
|
||||
- origin_geo
|
||||
- destination
|
||||
- destination_geo
|
||||
- categories
|
||||
- product
|
||||
- truck_type
|
||||
- tyre_type
|
||||
- weight
|
||||
- estimated_cost
|
||||
- distance
|
||||
- actual_cost
|
||||
- notes
|
||||
|
||||
### /loads
|
||||
|
||||
- `GET /find` : Find a list of elements with any of the following fields:
|
||||
|
||||
@@ -13,6 +13,7 @@ const companies = require('./companies/routes.js');
|
||||
const loadAttachments = require('./load-attachments/routes.js');
|
||||
const loads = require('./loads/routes.js');
|
||||
const loads_driver = require('./loads_driver/routes.js');
|
||||
const loadTemplates = require('./load-templates/routes.js');
|
||||
const proposals = require('./proposals/routes.js');
|
||||
const users = require('./users/routes.js');
|
||||
const vehicles = require('./vehicles/routes.js');
|
||||
@@ -30,6 +31,7 @@ router.use('/groups', company_groups);
|
||||
router.use('/load-attachments', loadAttachments );
|
||||
router.use('/loads', loads);
|
||||
router.use('/loads_driver', loads_driver);
|
||||
router.use('/load-templates', loadTemplates );
|
||||
router.use('/notifications', notifications);
|
||||
router.use('/proposals', proposals);
|
||||
router.use('/users', users);
|
||||
|
||||
11
v1/src/apps/private/load-templates/routes.js
Normal file
11
v1/src/apps/private/load-templates/routes.js
Normal file
@@ -0,0 +1,11 @@
|
||||
'use strict';
|
||||
const router = require('express').Router();
|
||||
const services= require('./services.js');
|
||||
|
||||
router.post('/new', services.createTemplate);
|
||||
router.get('/all', services.getAllTemplates);
|
||||
router.get('/:id', services.getTemplate);
|
||||
router.patch('/:id', services.updateTemplate);
|
||||
router.delete('/:id', services.deleteTemplate);
|
||||
|
||||
module.exports = router;
|
||||
137
v1/src/apps/private/load-templates/services.js
Normal file
137
v1/src/apps/private/load-templates/services.js
Normal file
@@ -0,0 +1,137 @@
|
||||
"use strict";
|
||||
const { getModel } = require( '../../../lib/Models' );
|
||||
const { getPagination } = require( '../../../lib/Misc.js' );
|
||||
|
||||
const LoadTemplatesModel = getModel('load_templates');
|
||||
|
||||
function cleanUpData( data ){
|
||||
/**
|
||||
* Take the only fields from model that
|
||||
* should be modifiable by the client.
|
||||
* The rest are populated on demand by the event handlers.
|
||||
*/
|
||||
let data_fields = {
|
||||
template_name: null,
|
||||
alert_list: null,
|
||||
origin_warehouse: null,
|
||||
destination_warehouse: null,
|
||||
origin: null,
|
||||
origin_geo: null,
|
||||
destination: null,
|
||||
destination_geo: null,
|
||||
categories: null,
|
||||
product: null,
|
||||
truck_type: null,
|
||||
tyre_type: null,
|
||||
weight: null,
|
||||
estimated_cost: null,
|
||||
distance: null,
|
||||
actual_cost: null,
|
||||
notes: null,
|
||||
};
|
||||
|
||||
let filtered_data = {};
|
||||
|
||||
if( Object.keys( data_fields ).length === 0 ){
|
||||
throw "no data to add";
|
||||
}
|
||||
|
||||
for ( const [key, value] of Object.entries( data_fields ) ) {
|
||||
if( Object.hasOwn( data, key ) ){
|
||||
filtered_data[ key ] = data[ key ];
|
||||
}
|
||||
}
|
||||
|
||||
if( Object.keys( filtered_data ).length === 0 ){
|
||||
throw "no data to add";
|
||||
}
|
||||
|
||||
return filtered_data;
|
||||
}
|
||||
|
||||
async function createTemplate( req , res ) {
|
||||
try{
|
||||
const companyId = req.context.companyId;
|
||||
|
||||
const data = cleanUpData( req.body );
|
||||
data.company = companyId;
|
||||
|
||||
const template = new LoadTemplatesModel( data );
|
||||
await template.save();
|
||||
|
||||
res.send( template );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
}
|
||||
|
||||
async function updateTemplate( req , res ) {
|
||||
try{
|
||||
const templateId = req.params.id;
|
||||
const companyId = req.context.companyId;
|
||||
|
||||
const data = cleanUpData( req.body );
|
||||
data.company = companyId;
|
||||
|
||||
await LoadTemplatesModel.findByIdAndUpdate( templateId , data );
|
||||
|
||||
const template = await LoadTemplatesModel.findById( templateId );
|
||||
res.send( template );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
}
|
||||
|
||||
async function getTemplate( req, res ){
|
||||
try{
|
||||
const templateId = req.params.id;
|
||||
const template = await LoadTemplatesModel.findById( templateId );
|
||||
|
||||
if( ! template ){
|
||||
return res.status(400).send({ error : "invalid template id"});
|
||||
}
|
||||
|
||||
res.send( template );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteTemplate( req, res ){
|
||||
try{
|
||||
const companyId = req.context.companyId;
|
||||
const templateId = req.params.id;
|
||||
await LoadTemplatesModel.findOneAndDelete({
|
||||
_id: templateId,
|
||||
company : companyId
|
||||
});
|
||||
res.send({ msg: "item removed successfully" });
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
}
|
||||
|
||||
async function getAllTemplates( req, res ){
|
||||
try{
|
||||
const companyId = req.context.companyId;
|
||||
const templateList = await LoadTemplatesModel.find( {
|
||||
company : companyId
|
||||
} );
|
||||
res.send( templateList );
|
||||
}catch(error){
|
||||
console.error( error );
|
||||
return res.status( 500 ).send({ error });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createTemplate,
|
||||
getTemplate,
|
||||
getAllTemplates,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
};
|
||||
@@ -33,6 +33,7 @@ const pointSchema = new Schema({
|
||||
|
||||
const schema = new Schema({
|
||||
company: { type: Schema.Types.ObjectId, ref: 'companies', required: true },
|
||||
template_name : { type: String },
|
||||
|
||||
alert_list: [{ type: String, lowercase: true }],
|
||||
|
||||
|
||||
Reference in New Issue
Block a user