agmission/Development/server/routes/costing_items.js

38 lines
1.6 KiB
JavaScript

'use strict';
const Joi = require('joi'),
{ validateInputRequest, authRoles } = require('../middlewares/validate'),
{ CostingItemType, Units, jobInvoiceEditRoles, jobInvoiceViewRoles } = require('../helpers/constants');
module.exports = function (app) {
const router = require('express').Router(),
costingItemsCtl = require('../controllers/costing_items');
// On routes that end in /customers
router.route('/')
.get(authRoles(jobInvoiceViewRoles), costingItemsCtl.getCostingItems_get)
.post(authRoles(jobInvoiceEditRoles), validateInputRequest(createCostingItemSchema), costingItemsCtl.createCostingItem_post);
// On routes that end in /invoice_settings/:invoice_setting_id
router.route('/:costingItemId')
.get(authRoles(jobInvoiceViewRoles), costingItemsCtl.getCostingItemDetail_get)
.put(authRoles(jobInvoiceEditRoles), validateInputRequest(updateCostingItemSchema), costingItemsCtl.updateCostingItem_put)
.delete(authRoles(jobInvoiceEditRoles), costingItemsCtl.deleteCostingItem);
app.use('/api/costingItems', router);
};
const createCostingItemSchema = Joi.object().keys({
name: Joi.string().required(),
type: Joi.number().valid(...Object.values(CostingItemType)).required(),
unit: Joi.number().valid(...Object.values(Units)).required(),
price: Joi.number().min(0).required(),
});
const updateCostingItemSchema = Joi.object().keys({
name: Joi.string().optional(),
type: Joi.number().valid(...Object.values(CostingItemType)).optional(),
unit: Joi.number().valid(...Object.values(Units)).optional(),
price: Joi.number().min(0).optional(),
});