180 lines
4.5 KiB
TypeScript
180 lines
4.5 KiB
TypeScript
import { Router } from 'express';
|
|
import { InventoryController } from '../controllers/inventory.controller';
|
|
import { requireAuth, requireRoles, requirePermissions } from '../../../shared/middleware/auth.middleware';
|
|
import { validateBody, validateQuery } from '../../../shared/validation/validation.middleware';
|
|
import {
|
|
createTransferSchema,
|
|
shipTransferSchema,
|
|
receiveTransferSchema,
|
|
cancelTransferSchema,
|
|
listTransfersQuerySchema,
|
|
createAdjustmentSchema,
|
|
addAdjustmentLineSchema,
|
|
rejectAdjustmentSchema,
|
|
cancelAdjustmentSchema,
|
|
listAdjustmentsQuerySchema,
|
|
} from '../validation/inventory.schema';
|
|
|
|
export function createInventoryRoutes(controller: InventoryController): Router {
|
|
const router = Router();
|
|
|
|
// Apply auth middleware to all routes
|
|
router.use(requireAuth);
|
|
|
|
// ==================== TRANSFER ROUTES ====================
|
|
|
|
// Create transfer
|
|
router.post(
|
|
'/transfers',
|
|
requirePermissions(['inventory.transfers.create']),
|
|
validateBody(createTransferSchema),
|
|
controller.createTransfer
|
|
);
|
|
|
|
// List transfers
|
|
router.get(
|
|
'/transfers',
|
|
requirePermissions(['inventory.transfers.view']),
|
|
validateQuery(listTransfersQuerySchema),
|
|
controller.listTransfers
|
|
);
|
|
|
|
// Get transfer summary
|
|
router.get(
|
|
'/transfers/summary',
|
|
requirePermissions(['inventory.transfers.view']),
|
|
controller.getTransferSummary
|
|
);
|
|
|
|
// Get incoming transfers
|
|
router.get(
|
|
'/transfers/incoming',
|
|
requirePermissions(['inventory.transfers.view']),
|
|
controller.getIncomingTransfers
|
|
);
|
|
|
|
// Get transfer by ID
|
|
router.get(
|
|
'/transfers/:id',
|
|
requirePermissions(['inventory.transfers.view']),
|
|
controller.getTransfer
|
|
);
|
|
|
|
// Submit transfer for approval
|
|
router.post(
|
|
'/transfers/:id/submit',
|
|
requirePermissions(['inventory.transfers.submit']),
|
|
controller.submitTransfer
|
|
);
|
|
|
|
// Approve transfer
|
|
router.post(
|
|
'/transfers/:id/approve',
|
|
requireRoles(['admin', 'warehouse_manager', 'manager']),
|
|
controller.approveTransfer
|
|
);
|
|
|
|
// Ship transfer
|
|
router.post(
|
|
'/transfers/:id/ship',
|
|
requirePermissions(['inventory.transfers.ship']),
|
|
validateBody(shipTransferSchema),
|
|
controller.shipTransfer
|
|
);
|
|
|
|
// Receive transfer
|
|
router.post(
|
|
'/transfers/:id/receive',
|
|
requirePermissions(['inventory.transfers.receive']),
|
|
validateBody(receiveTransferSchema),
|
|
controller.receiveTransfer
|
|
);
|
|
|
|
// Cancel transfer
|
|
router.post(
|
|
'/transfers/:id/cancel',
|
|
requirePermissions(['inventory.transfers.cancel']),
|
|
validateBody(cancelTransferSchema),
|
|
controller.cancelTransfer
|
|
);
|
|
|
|
// ==================== ADJUSTMENT ROUTES ====================
|
|
|
|
// Create adjustment
|
|
router.post(
|
|
'/adjustments',
|
|
requirePermissions(['inventory.adjustments.create']),
|
|
validateBody(createAdjustmentSchema),
|
|
controller.createAdjustment
|
|
);
|
|
|
|
// List adjustments
|
|
router.get(
|
|
'/adjustments',
|
|
requirePermissions(['inventory.adjustments.view']),
|
|
validateQuery(listAdjustmentsQuerySchema),
|
|
controller.listAdjustments
|
|
);
|
|
|
|
// Get adjustment summary
|
|
router.get(
|
|
'/adjustments/summary',
|
|
requirePermissions(['inventory.adjustments.view']),
|
|
controller.getAdjustmentSummary
|
|
);
|
|
|
|
// Get adjustment by ID
|
|
router.get(
|
|
'/adjustments/:id',
|
|
requirePermissions(['inventory.adjustments.view']),
|
|
controller.getAdjustment
|
|
);
|
|
|
|
// Add line to adjustment
|
|
router.post(
|
|
'/adjustments/:id/lines',
|
|
requirePermissions(['inventory.adjustments.edit']),
|
|
validateBody(addAdjustmentLineSchema),
|
|
controller.addAdjustmentLine
|
|
);
|
|
|
|
// Submit adjustment for approval
|
|
router.post(
|
|
'/adjustments/:id/submit',
|
|
requirePermissions(['inventory.adjustments.submit']),
|
|
controller.submitAdjustment
|
|
);
|
|
|
|
// Approve adjustment
|
|
router.post(
|
|
'/adjustments/:id/approve',
|
|
requireRoles(['admin', 'warehouse_manager', 'manager']),
|
|
controller.approveAdjustment
|
|
);
|
|
|
|
// Reject adjustment
|
|
router.post(
|
|
'/adjustments/:id/reject',
|
|
requireRoles(['admin', 'warehouse_manager', 'manager']),
|
|
validateBody(rejectAdjustmentSchema),
|
|
controller.rejectAdjustment
|
|
);
|
|
|
|
// Post adjustment
|
|
router.post(
|
|
'/adjustments/:id/post',
|
|
requireRoles(['admin', 'warehouse_manager']),
|
|
controller.postAdjustment
|
|
);
|
|
|
|
// Cancel adjustment
|
|
router.post(
|
|
'/adjustments/:id/cancel',
|
|
requirePermissions(['inventory.adjustments.cancel']),
|
|
validateBody(cancelAdjustmentSchema),
|
|
controller.cancelAdjustment
|
|
);
|
|
|
|
return router;
|
|
}
|