erp-retail-backend-v2/src/modules/inventory/routes/inventory.routes.ts
rckrdmrd a6186c4022 Migración desde erp-retail/backend - Estándar multi-repo v2
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:11:34 -06:00

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;
}