$dryer->dashboardUrl()]); } public function status(DryerClient $dryer): JsonResponse { try { return response()->json(['status' => $dryer->status(), 'history' => $dryer->history()]); } catch (Throwable $exception) { report($exception); return response()->json(['message' => 'Dryer is unavailable.'], 503); } } public function control(Request $request, DryerClient $dryer): JsonResponse { abort_unless($request->user()->role === 'admin', 403); $data = $request->validate([ 'dryerOn' => ['required', 'boolean'], 'profile' => ['required_if:dryerOn,1', 'nullable', 'string', 'in:PLA,PETG,ABS,Nylon,Custom'], 'targetTemperature' => ['required_if:dryerOn,1', 'nullable', 'integer', 'between:45,70'], 'dryingTime' => ['required_if:dryerOn,1', 'nullable', 'integer', 'between:5,2880'], ]); try { $result = $data['dryerOn'] ? $dryer->start($data['profile'], $data['targetTemperature'], $data['dryingTime']) : $dryer->stop(); return response()->json($result); } catch (Throwable $exception) { report($exception); return response()->json(['message' => 'Dryer is unavailable.'], 503); } } public function acknowledge(Request $request, DryerClient $dryer): JsonResponse { abort_unless($request->user()->role === 'admin', 403); try { return response()->json($dryer->acknowledge()); } catch (Throwable $exception) { report($exception); return response()->json(['message' => 'Dryer fault could not be acknowledged.'], 503); } } }