post('login', static fn(Request $r): array => (new AuthService())->login($r)); $router->post('logout', static fn(Request $r): array => (new AuthService())->logout($r)); $router->get('me', static fn(Request $r): array => (new AuthService())->me($r)); $router->post('me', static fn(Request $r): array => (new AuthService())->me($r)); $requireOwner = static function (Request $r) use ($authService): array { $session = $authService->requireUser($r); if (($session['user']['permissions']['canManageBackend'] ?? false) !== true) { throw new ApiException('FORBIDDEN', 'Samo vlasnik sistema može pokrenuti ciljanu dijagnostiku.', 403); } return $session; }; $health = static fn(Request $r): array => [ 'application' => 'Seoski odbor Gornje Rapče', 'service' => 'SOGR R3-R6 Targeted Transaction Diagnostic API', 'phase' => Phase7CA6R2R3R6TargetedDiagnosticService::PHASE, 'version' => Phase7CA6R2R3R6TargetedDiagnosticService::VERSION, 'mode' => Phase7CA6R2R3R6TargetedDiagnosticService::MODE, 'status' => 'available', 'writesAvailableThroughThisEndpoint' => false, ]; $router->get('healthCheck', $health); $router->post('healthCheck', $health); $status = static function (Request $r) use ($requireOwner, $service): array { $requireOwner($r); return $service->status(); }; $router->get('phase7cA6R2R3R6Status', $status); $router->post('phase7cA6R2R3R6Status', $status); $run = static function (Request $r) use ($requireOwner, $service): array { $requireOwner($r); if ($r->input('dryRun', true) !== true) { throw new ApiException('DRY_RUN_REQUIRED', 'R3-R6 podržava isključivo dryRun=true.', 400); } $requestId = trim((string) $r->input('requestId', '')); return $service->run($requestId !== '' ? $requestId : null); }; $router->post('phase7cA6R2R3R6Run', $run); $router->dispatch($request);