mqttService->exists(); } catch (MQTTException $exception) { $this->logger->error($exception->getMessage(), ['exception' => $exception]); return false; } } /** * @return Model\Job * @throws Read */ public function get(): Model\Job { try { return $this->load(json_decode($this->mqttService->get(), true)); } catch (MQTTException $exception) { $this->logger->error($exception->getMessage(), ['exception' => $exception]); throw new Read(__CLASS__, $exception); } } /** * @param array $configuration * @return Model\Job * @throws Create */ public function add(array $configuration): Model\Job { try { $now = (new DateTimeImmutable('now', new DateTimeZone($_ENV['TZ'] ?? 'America/Santiago'))); } catch (DateMalformedStringException | DateInvalidTimeZoneException $exception) { $this->logger->warning($exception->getMessage(), ['exception' => $exception]); $now = new DateTimeImmutable(); } $data = [ 'id' => $now->format('Uu'), 'configuration' => $configuration, 'executed' => false, 'created_at' => $now->format('Y-m-d H:i:s'), 'updated_at' => null, 'retries' => 0 ]; try { $this->mqttService->set(json_encode($data)); } catch (MQTTException $exception) { throw new Create(__CLASS__, $exception); } return $this->load($data); } /** * @param Model\Job $job * @return void * @throws Update */ public function update(Model\Job $job): void { try { $now = (new DateTimeImmutable('now', new DateTimeZone($_ENV['TZ'] ?? 'America/Santiago'))); } catch (DateMalformedStringException | DateInvalidTimeZoneException) { $now = new DateTimeImmutable(); } $data = json_decode(json_encode($job), true); $data['updated_at'] = $now->format('Y-m-d H:i:s'); try { $this->mqttService->update(json_encode($data)); } catch (MQTTException $exception) { throw new Update(__CLASS__, $exception); } } /** * @param Model\Job $job * @throws Delete */ public function remove(Model\Job $job): void { try { $this->mqttService->remove(); } catch (MQTTException $exception) { throw new Delete(__CLASS__, $exception); } } /** * @param Model\Job $job * @return bool */ public function execute(Model\Job $job): bool { try { $this->mqttService->remove(); return true; } catch (MQTTException $exception) { $this->logger->error($exception->getMessage(), ['exception' => $exception]); return false; } } protected function load(array $data, ?int $id = null): Model\Job { $job = new Model\Job(); $job->id = $id ?? $data['id'] ?? null; $job->configuration = $data['configuration'] ?? []; $job->executed = $data['executed'] ?? false; $job->retries = $data['retries'] ?? 0; return $job; } }