firstOrFail(); $updateData = [ 'status' => 'online', 'temperature' => $data['temperature'] ?? $machine->temperature, 'current_page' => $data['current_page'] ?? $machine->current_page, 'door_status' => $data['door_status'] ?? $machine->door_status, 'firmware_version' => $data['firmware_version'] ?? $machine->firmware_version, 'last_heartbeat_at' => now(), ]; $machine->update($updateData); // Record log if provided if (!empty($data['log'])) { $machine->logs()->create([ 'level' => $data['log_level'] ?? 'info', 'message' => $data['log'], 'payload' => $data['log_payload'] ?? null, ]); } return $machine; }); } /** * Update machine slot stock. */ public function updateSlotStock(Machine $machine, int $slotNo, int $stock): void { $machine->slots()->where('slot_no', $slotNo)->update([ 'stock' => $stock, 'last_restocked_at' => now(), ]); } /** * Legacy support for recordLog (Existing code). */ public function recordLog(int $machineId, array $data): MachineLog { $machine = Machine::findOrFail($machineId); return $machine->logs()->create([ 'level' => $data['level'] ?? 'info', 'message' => $data['message'], 'payload' => $data['context'] ?? null, ]); } }