38 lines
1.6 KiB
JavaScript
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(),
|
|
});
|