diff --git a/app/Http/Controllers/RoomControlController.php b/app/Http/Controllers/RoomControlController.php index e18bff7..fa8f6c6 100644 --- a/app/Http/Controllers/RoomControlController.php +++ b/app/Http/Controllers/RoomControlController.php @@ -8,6 +8,8 @@ use App\Http\Requests\ReceiveRoomStatusDataRequest; use App\Services\TcpSocketClient; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth; +use App\Services\ApiClient; +use App\Models\User; use App\Models\Branch; use App\Models\Room; use App\Models\MachineStatus; @@ -198,6 +200,27 @@ class RoomControlController extends Controller $room->touch(); // 更新 updated_at $room->save(); } + $externalUrl = $branch->external_ip; + $parsed = parse_url($externalUrl); + $hostParts = explode('.', $parsed['host']); + + if (count($hostParts) >= 3) { + $mainDomain = implode('.', array_slice($hostParts, 1)); + } else { + $mainDomain = $parsed['host']; + } + + $mainDomainUrl = $parsed['scheme'] . '://' . $mainDomain; + try { + $user = \App\Models\User::find(2); // 你可改為 config 或動態決定 + if ($user && $user->api_plain_token) { + $client = new ApiClient($mainDomainUrl,$user->api_plain_token); + $client->post('/api/room/heartbeat', $validated); + } + } catch (\Throwable $e) { + logger()->error('❌ Failed to forward machine status: ' . $e->getMessage()); + } + return ApiResponse::success([ 'data' => MachineStatus::create($validated), diff --git a/app/Http/Requests/ReceiveRoomStatusDataRequest.php b/app/Http/Requests/ReceiveRoomStatusDataRequest.php index ae90d82..7e62797 100644 --- a/app/Http/Requests/ReceiveRoomStatusDataRequest.php +++ b/app/Http/Requests/ReceiveRoomStatusDataRequest.php @@ -7,7 +7,7 @@ use Illuminate\Foundation\Http\FormRequest; /** * @OA\Schema( * schema="ReceiveRoomStatusDataRequest", - * required={"branch_name","hostname", "ip", "status"}, + * required={"branch_name","hostname", "ip"}, * @OA\Property(property="branch_name", type="string", example="測試"), * @OA\Property(property="hostname", type="string", example="PC101"), * @OA\Property(property="ip", type="string", example="192.168.XX.XX"), diff --git a/app/Livewire/Admin/RoomDetailModal.php b/app/Livewire/Admin/RoomDetailModal.php index bcac030..1cadde0 100644 --- a/app/Livewire/Admin/RoomDetailModal.php +++ b/app/Livewire/Admin/RoomDetailModal.php @@ -85,9 +85,8 @@ class RoomDetailModal extends Component $this->sendErrorNotification('api', 'API token is missing.'); return false; } - - $apiClient = new ApiClient(); - $response = $apiClient->setToken($token)->post('/room/sendSwitch', $data); + $apiClient = new ApiClient($this->branch->external_ip,$token); + $response = $apiClient->post('/api/room/sendSwitch', $data); if ($response->failed()) { $this->sendErrorNotification('api', 'API request failed: ' . $response->body()); return false; diff --git a/app/Services/ApiClient.php b/app/Services/ApiClient.php index 08de505..68d6140 100644 --- a/app/Services/ApiClient.php +++ b/app/Services/ApiClient.php @@ -8,10 +8,21 @@ class ApiClient protected string $baseUrl; protected string $token; - public function __construct(string $token = null) + public function __construct(string $baseUrl = null,string $token = null) { - $this->baseUrl = config('services.room_api.base_url', 'https://ktv.test/api'); - $this->token = $token ?? config('services.room_api.token',''); + $this->baseUrl = $baseUrl; + $this->token = $token; + } + public function set(string $baseUrl = null,string $token = null):self + { + $this->baseUrl = $baseUrl; + $this->token = $token; + return $this; + } + public function setBaseUrl():self + { + $this->baseUrl = $baseUrl; + return $this; } public function setToken(string $token): self { diff --git a/config/services.php b/config/services.php index 860cf31..ef409b3 100644 --- a/config/services.php +++ b/config/services.php @@ -13,9 +13,7 @@ return [ | a conventional file to locate the various service credentials. | */ - 'room_api' => [ - 'base_url' => env('ROOM_API_BASE_URL', env('APP_URL') . '/api'), - ], + 'postmark' => [ 'token' => env('POSTMARK_TOKEN'), ],