From 6cc4f2759d3b22fbe94e25a81659392694c8e360 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 29 Jun 2026 14:25:51 +0200 Subject: [PATCH] Enhance self-serve functionality by adding lane availability checks and updating response data --- services/nginx/app/routes/guestRoute.php | 39 ++++++++++++++++--- .../Selfserve/SelfserveRouteWiringTest.php | 8 +++- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/services/nginx/app/routes/guestRoute.php b/services/nginx/app/routes/guestRoute.php index 13fd7de0..6d6447aa 100644 --- a/services/nginx/app/routes/guestRoute.php +++ b/services/nginx/app/routes/guestRoute.php @@ -4,6 +4,7 @@ namespace routes; use classes\authentication; use classes\recaptcha; +use classes\selfserve; use classes\virkdata; use objects\department_lanes_o; use objects\departments_o; @@ -53,31 +54,57 @@ class guestRoute $this->get('/guest/departments', function () { global $response; $departments = (new departments_o()); + try { + $self_serve_module_enabled = (bool)(new selfserve())->config->enabled->getVariableValue(); + } catch (\Throwable) { + $self_serve_module_enabled = false; + } // Check if the department lane status is requested to be included $include_lane_status = false; if (self::isParametersSet(['include_lanes']) && self::getParameter('include_lanes')) { $include_lane_status = true; } - $response->success($departments->listObjectsWithPaginationIfSet(function ($department_array) use ($departments, $include_lane_status) { + $response->success($departments->listObjectsWithPaginationIfSet(function ($department_array) use ($departments, $include_lane_status, $self_serve_module_enabled) { $additional_data = []; // If including lane status, fetch it if ($include_lane_status) { $department = $departments->select((int)$department_array['id']); // Include the status of self-serve in the department (disabled, when staffed hours) - $additional_data['self_serve_enabled'] = (bool)$department->getSelfServeEnabled(); + $department_self_serve_enabled = (bool)$department->getSelfServeEnabled(); + $additional_data['self_serve_enabled'] = $department_self_serve_enabled; + $additional_data['self_serve_module_enabled'] = $self_serve_module_enabled; $additional_data['lanes'] = array_map( /** * @param department_lanes_o $lane * @return array */ - function (department_lanes_o $lane) { + function (department_lanes_o $lane) use ($department_self_serve_enabled, $self_serve_module_enabled) { + $status = (string)$lane->getLaneStatus()->name; + $lane_self_serve_enabled = $lane->isSelfServeEnabled(); + $self_serve_available = $self_serve_module_enabled + && $department_self_serve_enabled + && $lane_self_serve_enabled + && strtoupper(trim($status)) === 'AVAILABLE'; + $self_serve_unavailable_reason = null; + if (!$self_serve_module_enabled) { + $self_serve_unavailable_reason = 'self_serve_module_disabled'; + } elseif (!$department_self_serve_enabled) { + $self_serve_unavailable_reason = 'department_self_serve_disabled'; + } elseif (!$lane_self_serve_enabled) { + $self_serve_unavailable_reason = 'lane_self_serve_disabled'; + } elseif (strtoupper(trim($status)) !== 'AVAILABLE') { + $self_serve_unavailable_reason = 'lane_status_' . strtolower($status); + } + return [ 'id' => (int)$lane->id, 'name' => (string)$lane->name->value(), - 'status' => (string)$lane->getLaneStatus()->name, + 'status' => $status, 'products' => $lane->getSelfServeLaneProducts(), - 'selfserve_enabled' => $lane->isSelfServeEnabled(), - 'machine_available' => $lane->isSelfServeEnabled() && !empty($lane->relay_machine_id->value()), + 'selfserve_enabled' => $lane_self_serve_enabled, + 'selfserve_available' => $self_serve_available, + 'selfserve_unavailable_reason' => $self_serve_unavailable_reason, + 'machine_available' => $self_serve_available && !empty($lane->relay_machine_id->value()), 'dynamic_image_id' => $lane->dynamic_image_id->value() ? (int)$lane->dynamic_image_id->value() : null, ]; }, $department->getLanes()); diff --git a/services/nginx/app/tests/Unit/Selfserve/SelfserveRouteWiringTest.php b/services/nginx/app/tests/Unit/Selfserve/SelfserveRouteWiringTest.php index 811d45bd..623110be 100644 --- a/services/nginx/app/tests/Unit/Selfserve/SelfserveRouteWiringTest.php +++ b/services/nginx/app/tests/Unit/Selfserve/SelfserveRouteWiringTest.php @@ -74,8 +74,12 @@ it('wires lane-level self-serve toggles through lane APIs, guest payloads, and e ->and($laneObject)->toContain('setMachineCleanerRelayStatusHard(false)'); expect($guestRoute)->not->toBeFalse() - ->and($guestRoute)->toContain("'selfserve_enabled' => \$lane->isSelfServeEnabled()") - ->and($guestRoute)->toContain("'machine_available' => \$lane->isSelfServeEnabled() && !empty(\$lane->relay_machine_id->value())"); + ->and($guestRoute)->toContain("\$additional_data['self_serve_module_enabled'] = \$self_serve_module_enabled") + ->and($guestRoute)->toContain("'self_serve_module_disabled'") + ->and($guestRoute)->toContain("'selfserve_enabled' => \$lane_self_serve_enabled") + ->and($guestRoute)->toContain("'selfserve_available' => \$self_serve_available") + ->and($guestRoute)->toContain("'selfserve_unavailable_reason' => \$self_serve_unavailable_reason") + ->and($guestRoute)->toContain("'machine_available' => \$self_serve_available && !empty(\$lane->relay_machine_id->value())"); expect($edgeWorkspace)->not->toBeFalse() ->and($edgeWorkspace)->toContain("'selfserve_enabled' => \$lane->isSelfServeEnabled()")