get(); $dhcpStatus = $dhcp->status(); return view("setup.index", compact("reservations", "dhcpStatus")); } public function status(NetworkService $dhcp) { return response()->json($dhcp->status()); } public function store(Request $request) { $data = $request->validate([ "hostname" => ["required", "string", "max:100", 'regex:/^[a-zA-Z0-9_-]+$/'], "mac_address" => ["required", "string", 'regex:/^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/'], "ip_address" => ["required", "ip"], "enabled" => ["nullable", "boolean"], ]); $data["mac_address"] = strtoupper($data["mac_address"]); $data["enabled"] = $request->boolean("enabled"); // Cek duplicate MAC if (ConfigPosNetwork::where("mac_address", $data["mac_address"])->exists()) { return response()->json( [ "success" => false, "message" => "MAC address already registered.", ], 422, ); } // Cek duplicate IP if (ConfigPosNetwork::where("ip_address", $data["ip_address"])->exists()) { return response()->json( [ "success" => false, "message" => "IP address already registered.", ], 422, ); } $reservation = ConfigPosNetwork::create($data); return response()->json( [ "success" => true, "message" => "DHCP reservation created successfully.", "data" => $reservation, ], 201, ); } public function update(Request $request, ConfigPosNetwork $reservation) { $data = $request->validate([ "hostname" => ["required", "string", "max:100", 'regex:/^[a-zA-Z0-9_-]+$/'], "mac_address" => ["required", "string", 'regex:/^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/'], "ip_address" => ["required", "ip"], "enabled" => ["nullable", "boolean"], ]); $data["mac_address"] = strtoupper($data["mac_address"]); $data["enabled"] = $request->boolean("enabled"); // Cek duplicate MAC, // kecuali reservation yang sedang diedit if ( ConfigPosNetwork::where("mac_address", $data["mac_address"])->where("id", "!=", $reservation->id)->exists() ) { return response()->json( [ "success" => false, "message" => "MAC address already registered.", ], 422, ); } // Cek duplicate IP if (ConfigPosNetwork::where("ip_address", $data["ip_address"])->where("id", "!=", $reservation->id)->exists()) { return response()->json( [ "success" => false, "message" => "IP address already registered.", ], 422, ); } $reservation->update($data); return response()->json([ "success" => true, "message" => "DHCP reservation updated successfully.", "data" => $reservation->fresh(), ]); } public function destroy(ConfigPosNetwork $reservation) { $reservation->delete(); return response()->json([ "success" => true, "message" => "Reservation deleted successfully.", ]); } public function test(NetworkService $dhcp) { try { $result = $dhcp->test(); return response()->json([ "success" => true, "message" => "DHCP configuration is valid.", "data" => $result, ]); } catch (\Throwable $e) { return response()->json( [ "success" => false, "message" => $e->getMessage(), ], 422, ); } } public function apply(NetworkService $dhcp) { try { $dhcp->apply(); return response()->json([ "success" => true, "message" => "DHCP configuration applied successfully.", ]); } catch (\Throwable $e) { return response()->json( [ "success" => false, "message" => $e->getMessage(), ], 500, ); } } public function logs(NetworkService $dhcp) { return response()->json([ "success" => true, "logs" => $dhcp->logs(30), ]); } }