'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(), });