get('/', function () { return "Backend Running"; }); $routes->options('(:any)', function () { return ''; }); $routes->group('api', ['filter' => 'auth'], function ($routes) { $routes->get('dashboard', 'DashboardController::index'); $routes->get('result', 'ResultController::index'); $routes->get('sample', 'SampleController::index'); }); // V2 Auth API Routes (public - no auth required) $routes->group('v2/auth', function ($routes) { $routes->post('login', 'AuthV2Controller::login'); $routes->post('register', 'AuthV2Controller::register'); $routes->get('check', 'AuthV2Controller::checkAuth'); $routes->post('logout', 'AuthV2Controller::logout'); }); // Faker $routes->get('faker/faker-patient/(:num)', 'faker\FakerPatient::sendMany/$1'); $routes->group('api', function ($routes) { // Auth $routes->group('auth', function ($routes) { $routes->post('login', 'AuthController::login'); $routes->post('change_pass', 'AuthController::change_pass'); $routes->post('register', 'AuthController::register'); $routes->get('check', 'AuthController::checkAuth'); $routes->post('logout', 'AuthController::logout'); }); // Patient $routes->group('patient', function ($routes) { $routes->get('/', 'Patient\PatientController::index'); $routes->post('/', 'Patient\PatientController::create'); $routes->get('(:num)', 'Patient\PatientController::show/$1'); $routes->delete('/', 'Patient\PatientController::delete'); $routes->patch('/', 'Patient\PatientController::update'); $routes->get('check', 'Patient\PatientController::patientCheck'); }); // PatVisit $routes->group('patvisit', function ($routes) { $routes->get('/', 'PatVisitController::index'); $routes->post('/', 'PatVisitController::create'); $routes->get('patient/(:num)', 'PatVisitController::showByPatient/$1'); $routes->get('(:any)', 'PatVisitController::show/$1'); $routes->delete('/', 'PatVisitController::delete'); $routes->patch('/', 'PatVisitController::update'); }); $routes->group('patvisitadt', function ($routes) { $routes->get('visit/(:num)', 'PatVisitController::getADTByVisit/$1'); $routes->get('(:num)', 'PatVisitController::showADT/$1'); $routes->post('/', 'PatVisitController::createADT'); $routes->patch('/', 'PatVisitController::updateADT'); $routes->delete('/', 'PatVisitController::deleteADT'); }); // Master Data // Location $routes->group('location', function ($routes) { $routes->get('/', 'LocationController::index'); $routes->get('(:num)', 'LocationController::show/$1'); $routes->post('/', 'LocationController::create'); $routes->patch('/', 'LocationController::update'); $routes->delete('/', 'LocationController::delete'); }); // Contact $routes->group('contact', function ($routes) { $routes->get('/', 'Contact\ContactController::index'); $routes->get('(:num)', 'Contact\ContactController::show/$1'); $routes->post('/', 'Contact\ContactController::create'); $routes->patch('/', 'Contact\ContactController::update'); $routes->delete('/', 'Contact\ContactController::delete'); }); $routes->group('occupation', function ($routes) { $routes->get('/', 'Contact\OccupationController::index'); $routes->get('(:num)', 'Contact\OccupationController::show/$1'); $routes->post('/', 'Contact\OccupationController::create'); $routes->patch('/', 'Contact\OccupationController::update'); //$routes->delete('/', 'Contact\OccupationController::delete'); }); $routes->group('medicalspecialty', function ($routes) { $routes->get('/', 'Contact\MedicalSpecialtyController::index'); $routes->get('(:num)', 'Contact\MedicalSpecialtyController::show/$1'); $routes->post('/', 'Contact\MedicalSpecialtyController::create'); $routes->patch('/', 'Contact\MedicalSpecialtyController::update'); }); // Lib ValueSet (file-based) $routes->group('valueset', function ($routes) { $routes->get('/', 'ValueSetController::index'); $routes->get('(:any)', 'ValueSetController::index/$1'); $routes->post('refresh', 'ValueSetController::refresh'); // User ValueSet (database-based) $routes->group('user', function ($routes) { $routes->group('items', function ($routes) { $routes->get('/', 'ValueSetController::items'); $routes->get('(:num)', 'ValueSetController::showItem/$1'); $routes->post('/', 'ValueSetController::createItem'); $routes->put('(:num)', 'ValueSetController::updateItem/$1'); $routes->delete('(:num)', 'ValueSetController::deleteItem/$1'); }); $routes->group('def', function ($routes) { $routes->get('/', 'ValueSetDefController::index'); $routes->get('(:num)', 'ValueSetDefController::show/$1'); $routes->post('/', 'ValueSetDefController::create'); $routes->put('(:num)', 'ValueSetDefController::update/$1'); $routes->delete('(:num)', 'ValueSetDefController::delete/$1'); }); }); }); // Result ValueSet $routes->group('result', function ($routes) { $routes->group('valueset', function ($routes) { $routes->get('/', 'Result\ResultValueSetController::index'); $routes->get('(:num)', 'Result\ResultValueSetController::show/$1'); $routes->post('/', 'Result\ResultValueSetController::create'); $routes->put('(:num)', 'Result\ResultValueSetController::update/$1'); $routes->delete('(:num)', 'Result\ResultValueSetController::delete/$1'); }); }); // Counter $routes->group('counter', function ($routes) { $routes->get('/', 'CounterController::index'); $routes->get('(:num)', 'CounterController::show/$1'); $routes->post('/', 'CounterController::create'); $routes->patch('/', 'CounterController::update'); $routes->delete('/', 'CounterController::delete'); }); // AreaGeo $routes->group('areageo', function ($routes) { $routes->get('/', 'AreaGeoController::index'); $routes->get('provinces', 'AreaGeoController::getProvinces'); $routes->get('cities', 'AreaGeoController::getCities'); }); // Organization $routes->group('organization', function ($routes) { // Account $routes->group('account', function ($routes) { $routes->get('/', 'Organization\AccountController::index'); $routes->get('(:num)', 'Organization\AccountController::show/$1'); $routes->post('/', 'Organization\AccountController::create'); $routes->patch('/', 'Organization\AccountController::update'); $routes->delete('/', 'Organization\AccountController::delete'); }); // Site $routes->group('site', function ($routes) { $routes->get('/', 'Organization\SiteController::index'); $routes->get('(:num)', 'Organization\SiteController::show/$1'); $routes->post('/', 'Organization\SiteController::create'); $routes->patch('/', 'Organization\SiteController::update'); $routes->delete('/', 'Organization\SiteController::delete'); }); // Discipline $routes->group('discipline', function ($routes) { $routes->get('/', 'Organization\DisciplineController::index'); $routes->get('(:num)', 'Organization\DisciplineController::show/$1'); $routes->post('/', 'Organization\DisciplineController::create'); $routes->patch('/', 'Organization\DisciplineController::update'); $routes->delete('/', 'Organization\DisciplineController::delete'); }); // Department $routes->group('department', function ($routes) { $routes->get('/', 'Organization\DepartmentController::index'); $routes->get('(:num)', 'Organization\DepartmentController::show/$1'); $routes->post('/', 'Organization\DepartmentController::create'); $routes->patch('/', 'Organization\DepartmentController::update'); $routes->delete('/', 'Organization\DepartmentController::delete'); }); // Workstation $routes->group('workstation', function ($routes) { $routes->get('/', 'Organization\WorkstationController::index'); $routes->get('(:num)', 'Organization\WorkstationController::show/$1'); $routes->post('/', 'Organization\WorkstationController::create'); $routes->patch('/', 'Organization\WorkstationController::update'); $routes->delete('/', 'Organization\WorkstationController::delete'); }); // HostApp $routes->group('hostapp', function ($routes) { $routes->get('/', 'Organization\HostAppController::index'); $routes->get('(:any)', 'Organization\HostAppController::show/$1'); $routes->post('/', 'Organization\HostAppController::create'); $routes->patch('/', 'Organization\HostAppController::update'); $routes->delete('/', 'Organization\HostAppController::delete'); }); // HostComPara $routes->group('hostcompara', function ($routes) { $routes->get('/', 'Organization\HostComParaController::index'); $routes->get('(:any)', 'Organization\HostComParaController::show/$1'); $routes->post('/', 'Organization\HostComParaController::create'); $routes->patch('/', 'Organization\HostComParaController::update'); $routes->delete('/', 'Organization\HostComParaController::delete'); }); // CodingSys $routes->group('codingsys', function ($routes) { $routes->get('/', 'Organization\CodingSysController::index'); $routes->get('(:num)', 'Organization\CodingSysController::show/$1'); $routes->post('/', 'Organization\CodingSysController::create'); $routes->patch('/', 'Organization\CodingSysController::update'); $routes->delete('/', 'Organization\CodingSysController::delete'); }); }); // Infrastructure $routes->group('equipmentlist', function ($routes) { $routes->get('/', 'Infrastructure\EquipmentListController::index'); $routes->get('(:num)', 'Infrastructure\EquipmentListController::show/$1'); $routes->post('/', 'Infrastructure\EquipmentListController::create'); $routes->patch('/', 'Infrastructure\EquipmentListController::update'); $routes->delete('/', 'Infrastructure\EquipmentListController::delete'); }); // Specimen $routes->group('specimen', function ($routes) { // Container aliases - 'container' and 'containerdef' both point to ContainerDefController $routes->group('container', function ($routes) { $routes->get('/', 'Specimen\ContainerDefController::index'); $routes->get('(:num)', 'Specimen\ContainerDefController::show/$1'); $routes->post('/', 'Specimen\ContainerDefController::create'); $routes->patch('/', 'Specimen\ContainerDefController::update'); }); $routes->group('containerdef', function ($routes) { $routes->get('/', 'Specimen\ContainerDefController::index'); $routes->get('(:num)', 'Specimen\ContainerDefController::show/$1'); $routes->post('/', 'Specimen\ContainerDefController::create'); $routes->patch('/', 'Specimen\ContainerDefController::update'); }); $routes->group('prep', function ($routes) { $routes->get('/', 'Specimen\SpecimenPrepController::index'); $routes->get('(:num)', 'Specimen\SpecimenPrepController::show/$1'); $routes->post('/', 'Specimen\SpecimenPrepController::create'); $routes->patch('/', 'Specimen\SpecimenPrepController::update'); }); $routes->group('status', function ($routes) { $routes->get('/', 'Specimen\SpecimenStatusController::index'); $routes->get('(:num)', 'Specimen\SpecimenStatusController::show/$1'); $routes->post('/', 'Specimen\SpecimenStatusController::create'); $routes->patch('/', 'Specimen\SpecimenStatusController::update'); }); $routes->group('collection', function ($routes) { $routes->get('/', 'Specimen\SpecimenCollectionController::index'); $routes->get('(:num)', 'Specimen\SpecimenCollectionController::show/$1'); $routes->post('/', 'Specimen\SpecimenCollectionController::create'); $routes->patch('/', 'Specimen\SpecimenCollectionController::update'); }); $routes->get('/', 'Specimen\SpecimenController::index'); $routes->get('(:num)', 'Specimen\SpecimenController::show/$1'); $routes->post('/', 'Specimen\SpecimenController::create'); $routes->patch('/', 'Specimen\SpecimenController::update'); }); // Test Mapping $routes->group('test', function ($routes) { $routes->get('/', 'Test\TestsController::index'); $routes->get('(:num)', 'Test\TestsController::show/$1'); $routes->post('/', 'Test\TestsController::create'); $routes->patch('/', 'Test\TestsController::update'); $routes->group('testmap', function ($routes) { $routes->get('/', 'Test\TestMapController::index'); $routes->get('(:num)', 'Test\TestMapController::show/$1'); $routes->post('/', 'Test\TestMapController::create'); $routes->patch('/', 'Test\TestMapController::update'); $routes->delete('/', 'Test\TestMapController::delete'); // Filter routes $routes->get('by-testcode/(:any)', 'Test\TestMapController::showByTestCode/$1'); // TestMapDetail nested routes $routes->group('detail', function ($routes) { $routes->get('/', 'Test\TestMapDetailController::index'); $routes->get('(:num)', 'Test\TestMapDetailController::show/$1'); $routes->post('/', 'Test\TestMapDetailController::create'); $routes->patch('/', 'Test\TestMapDetailController::update'); $routes->delete('/', 'Test\TestMapDetailController::delete'); $routes->get('by-testmap/(:num)', 'Test\TestMapDetailController::showByTestMap/$1'); $routes->post('batch', 'Test\TestMapDetailController::batchCreate'); $routes->patch('batch', 'Test\TestMapDetailController::batchUpdate'); $routes->delete('batch', 'Test\TestMapDetailController::batchDelete'); }); }); }); // Orders $routes->group('ordertest', function ($routes) { $routes->get('/', 'OrderTestController::index'); $routes->get('(:any)', 'OrderTestController::show/$1'); $routes->post('/', 'OrderTestController::create'); $routes->patch('/', 'OrderTestController::update'); $routes->delete('/', 'OrderTestController::delete'); $routes->post('status', 'OrderTestController::updateStatus'); }); // Demo/Test Routes (No Auth) $routes->group('api/demo', function ($routes) { $routes->post('order', 'Test\DemoOrderController::createDemoOrder'); $routes->get('orders', 'Test\DemoOrderController::listDemoOrders'); }); // Edge API - Integration with tiny-edge $routes->group('edge', function ($routes) { $routes->post('results', 'EdgeController::results'); $routes->get('orders', 'EdgeController::orders'); $routes->post('orders/(:num)/ack', 'EdgeController::ack/$1'); $routes->post('status', 'EdgeController::status'); }); }); // Khusus /* $routes->get('/api/zones', 'Zones::index'); $routes->get('/api/zones/synchronize', 'Zones::synchronize'); $routes->get('/api/zones/provinces', 'Zones::getProvinces'); $routes->get('/api/zones/cities', 'Zones::getCities'); */