From 32ba9c11f7df08f6759fbcf8250afb33bc8b97a5 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 13 Jan 2026 11:35:34 +0900 Subject: [PATCH] door: don't require default row in database --- dist/sql/pvv_mysql.sql | 7 +------ dist/sql/pvv_sqlite.sql | 10 ++++------ src/pvv/side/door.php | 8 ++++++-- www/door/index.php | 7 ++++++- www/index.php | 11 ++++++++++- www/spaceapi.php | 10 +++++++++- 6 files changed, 36 insertions(+), 17 deletions(-) diff --git a/dist/sql/pvv_mysql.sql b/dist/sql/pvv_mysql.sql index 61a59e6..49bcfc8 100644 --- a/dist/sql/pvv_mysql.sql +++ b/dist/sql/pvv_mysql.sql @@ -39,11 +39,6 @@ CREATE TABLE motd ( ); CREATE TABLE door ( - `time` DATETIME PRIMARY KEY, + `time` INTEGER PRIMARY KEY, `open` BOOLEAN NOT NULL ); - -INSERT INTO - `door`(`time`, `open`) -VALUES - (0, FALSE); diff --git a/dist/sql/pvv_sqlite.sql b/dist/sql/pvv_sqlite.sql index 5ca7a9e..06156a1 100644 --- a/dist/sql/pvv_sqlite.sql +++ b/dist/sql/pvv_sqlite.sql @@ -38,9 +38,7 @@ CREATE TABLE "motd" ( "content" TEXT NOT NULL ); -CREATE TABLE "door" ("time" INTEGER PRIMARY KEY, "open" BOOLEAN); - -INSERT INTO - "door"("time", "open") -VALUES - (0, FALSE); +CREATE TABLE "door" ( + "time" INTEGER PRIMARY KEY, + "open" BOOLEAN NOT NULL +); diff --git a/src/pvv/side/door.php b/src/pvv/side/door.php index 149a415..2539fdd 100644 --- a/src/pvv/side/door.php +++ b/src/pvv/side/door.php @@ -70,9 +70,9 @@ class Door { } /** - * @return array{time: DateTimeImmutable, open: bool} + * @return ?array{time: DateTimeImmutable, open: bool} */ - public function getCurrent(): array { + public function getCurrent(): ?array { $query = ' SELECT time, @@ -85,6 +85,10 @@ class Door { $statement->execute(); $row = $statement->fetch(); + if (!$row) { + return null; + } + return [ 'time' => (new DateTimeImmutable)->setTimestamp((int) $row['time']), 'open' => (bool) $row['open'], diff --git a/www/door/index.php b/www/door/index.php index a50ebfa..16fc742 100644 --- a/www/door/index.php +++ b/www/door/index.php @@ -60,7 +60,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { ]); } else { // Only last entry - $line = (object) $door->getCurrent(); + $line = $door->getCurrent(); + if (is_null($line)) { + echo '{"status": "error", "message": "No door data"}'; + exit; + } + $line = (object) $line; echo json_encode([ 'status' => 'OK', 'time' => $line->time->getTimestamp(), diff --git a/www/index.php b/www/index.php index 507ae53..bec9f59 100644 --- a/www/index.php +++ b/www/index.php @@ -9,7 +9,16 @@ $motdfetcher = new pvv\side\MOTD($pdo); $motd = $motdfetcher->getMOTD(); $door = new pvv\side\Door($pdo); -$doorEntry = (object) $door->getCurrent(); +$doorEntry = $door->getCurrent(); +if (!is_null($doorEntry)) { + $doorEntry = (object) $doorEntry; +} else { + $doorEntry = (object) [ + 'time' => new DateTimeImmutable('@0'), + 'open' => false, + ]; +} + if ($doorEntry->time->getTimestamp() < (time() - 60 * 30)) { $doorStateText = 'Ingen data fra dørsensor'; } else { diff --git a/www/spaceapi.php b/www/spaceapi.php index aae76b5..fe1e0d7 100644 --- a/www/spaceapi.php +++ b/www/spaceapi.php @@ -9,7 +9,15 @@ $pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $door = new pvv\side\Door($pdo); -$doorEntry = (object) $door->getCurrent(); +$doorEntry = $door->getCurrent(); +if (!is_null($doorEntry)) { + $doorEntry = (object) $doorEntry; +} else { + $doorEntry = (object) [ + 'time' => new DateTimeImmutable('@0'), + 'open' => false, + ]; +} ?> {