BREAKING CHANGE: Remove public/spooler_db/ legacy system Changes: - Migrate validation preview from http://glenlis/spooler_db/main_dev.php to CI4 /report/{accessnumber} - Add ReportController::preview() for HTML preview in validation dialog - Add ReportController::generatePdf() to queue PDF generation via node_spooler at http://glenlis:3030 - Add ReportController::checkPdfStatus() to poll spooler job status - Add ReportController::postToSpooler() helper for curl requests to spooler API - Add routes: GET /report/(:num)/preview, GET /report/(:num)/pdf, GET /report/status/(:any) - Delete public/spooler_db/ directory (40+ legacy files) - Compact node_spooler/README.md from 577 to 342 lines Technical Details: - New architecture: CI4 Controller -> node_spooler (port 3030) -> Chrome CDP (port 42020) - API endpoints: POST /api/pdf/generate, GET /api/pdf/status/:jobId, GET /api/queue/stats - Features: Max 5 concurrent jobs, max 100 in queue, auto-cleanup after 60 min - Error handling: Chrome crash detection, manual error review in data/error/ - PDF infrastructure ready, frontend PDF buttons to be updated later in production Migration verified: - No external code references spooler_db - All assets duplicated in public/assets/report/ - Syntax checks passed for ReportController.php and Routes.php Refs: node_spooler/README.md
109 lines
4.2 KiB
PHP
109 lines
4.2 KiB
PHP
<?php
|
|
|
|
use CodeIgniter\Router\RouteCollection;
|
|
|
|
$routes->set404Override(function () {
|
|
$response = service('response');
|
|
$response->setStatusCode(404);
|
|
echo view('errors/notfound');
|
|
});
|
|
$routes->get('/unauthorized', 'ErrorPage::unauthorized');
|
|
|
|
|
|
$routes->get('/', 'Home::index');
|
|
$routes->get('/login', 'AuthController::loginPage', ['filter' => 'guest']);
|
|
$routes->post('/login', 'AuthController::login', ['filter' => 'guest']);
|
|
$routes->get('/logout', 'AuthController::logout');
|
|
$routes->patch('/setPassword', 'AuthController::setPassword');
|
|
|
|
$routes->get('label/coll/(:any)', 'LabelController::coll/$1');
|
|
$routes->get('label/dispatch/(:any)/(:any)', 'LabelController::dispatch/$1/$2');
|
|
$routes->get('label/all/(:any)', 'LabelController::print_all/$1');
|
|
$routes->get('print/(:num)', 'Home::printReport/$1', ['filter' => 'role:0,1,2,3,4']);
|
|
|
|
|
|
// --- API Group ---
|
|
$routes->group('api', function ($routes) {
|
|
|
|
// Users Management - Only Superuser (0) and Admin (1)
|
|
$routes->group('users', ['filter' => 'role:0,1'], function ($routes) {
|
|
$routes->get('', 'UsersController::index');
|
|
$routes->post('', 'UsersController::create');
|
|
$routes->patch('(:any)', 'UsersController::update/$1');
|
|
$routes->delete('(:any)', 'UsersController::delete/$1');
|
|
});
|
|
|
|
// Requests - All Roles (0,1,2,3,4)
|
|
$routes->group('requests', ['filter' => 'role:0,1,2,3,4'], function ($routes) {
|
|
$routes->get('', 'RequestsController::index');
|
|
$routes->get('(:any)/audit', 'ApiRequestsAuditController::show/$1');
|
|
$routes->post('validate/(:any)', 'RequestsController::val/$1');
|
|
$routes->delete('validate/(:any)', 'RequestsController::unval/$1');
|
|
});
|
|
|
|
// Validate API - Lab (2), Admin (1), Superuser (0)
|
|
$routes->group('validate', ['filter' => 'role:0,1,2'], function ($routes) {
|
|
$routes->get('unvalidated', 'ApiValidateController::unvalidated');
|
|
});
|
|
|
|
// Samples
|
|
$routes->group('samples', function ($routes) {
|
|
// Collect & Show - All Roles
|
|
$routes->group('', ['filter' => 'role:0,1,2,3,4'], function ($routes) {
|
|
$routes->post('collect/(:any)', 'SamplesController::collect/$1');
|
|
$routes->get('(:any)', 'SamplesController::show/$1');
|
|
});
|
|
|
|
// Unreceive - Only Superuser (0) and Admin (1)
|
|
$routes->group('', ['filter' => 'role:0,1'], function ($routes) {
|
|
$routes->delete('receive/(:any)', 'SamplesController::unreceive/$1');
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
|
|
// --- Page Routes ---
|
|
|
|
$routes->group('superuser', ['filter' => 'role:0'], function ($routes) {
|
|
$routes->get('', 'Pages\SuperuserController::index');
|
|
$routes->get('users', 'Pages\SuperuserController::users');
|
|
$routes->get('validate', 'Pages\SuperuserController::validatePage');
|
|
});
|
|
|
|
$routes->group('admin', ['filter' => 'role:1'], function ($routes) {
|
|
$routes->get('', 'Pages\AdminController::index');
|
|
$routes->get('users', 'Pages\AdminController::users');
|
|
$routes->get('validate', 'Pages\AdminController::validationPage');
|
|
});
|
|
|
|
$routes->group('lab', ['filter' => 'role:2'], function ($routes) {
|
|
$routes->get('', 'Pages\LabController::index');
|
|
$routes->get('validate', 'Pages\LabController::validationPage');
|
|
});
|
|
|
|
$routes->group('phlebo', ['filter' => 'role:3'], function ($routes) {
|
|
$routes->get('', 'Pages\PhlebotomistController::index');
|
|
});
|
|
|
|
$routes->group('cs', ['filter' => 'role:4'], function ($routes) {
|
|
$routes->get('', 'Pages\CsController::index');
|
|
});
|
|
|
|
$routes->get('/dummypage', 'Home::dummyPage');
|
|
|
|
// Report generation - Lab, Admin, Superuser, CS
|
|
$routes->group('report', ['filter' => 'role:0,1,2,4'], function ($routes) {
|
|
$routes->get('(:num)', 'ReportController::generate/$1');
|
|
$routes->get('(:num)/eng', 'ReportController::generate/$1/1');
|
|
$routes->get('(:num)/print', 'ReportController::print/$1');
|
|
$routes->get('(:num)/print/eng', 'ReportController::print/$1/1');
|
|
$routes->get('(:num)/preview', 'ReportController::preview/$1');
|
|
$routes->get('(:num)/pdf', 'ReportController::generatePdf/$1');
|
|
});
|
|
|
|
$routes->get('report/status/(:any)', 'ReportController::checkPdfStatus/$1');
|
|
|
|
// Keep backward compatibility - updated filter
|
|
$routes->get('print/(:num)', 'ReportController::generate/$1', ['filter' => 'role:0,1,2,3,4']);
|