summaryrefslogtreecommitdiff
path: root/src/Models/RoomEvent.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Models/RoomEvent.php')
-rw-r--r--src/Models/RoomEvent.php64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/Models/RoomEvent.php b/src/Models/RoomEvent.php
new file mode 100644
index 0000000..96dc204
--- /dev/null
+++ b/src/Models/RoomEvent.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Models;
+
+use App\Database;
+use Matrix\Enums\EventType;
+use Matrix\Events\ClientEvent;
+use Matrix\Events\StateEvent;
+
+class RoomEvent
+{
+ public function __construct(
+ private ClientEvent $event,
+ )
+ {}
+
+ /**
+ * @param array<string, mixed> $row
+ */
+ public static function transformEvent(array $row): ClientEvent
+ {
+ return new ClientEvent(
+ content: json_decode($row["content"], true),
+ eventId: $row["id"],
+ originServerTimestamp: new \DateTime($row["origin_server_timestamp"])->getTimestamp(),
+ roomId: $row["room_id"],
+ sender: $row["sender"],
+ type: EventType::from($row["type"]),
+ unsigned: json_decode($row["unsigned"], true),
+ );
+ }
+
+ public function insert(): bool
+ {
+ if ($this->event instanceof StateEvent) {
+ return !! Database::getInstance()->query(<<<SQL
+ insert into room_events (id, content, type, sender, origin_server_timestamp, room_id, unsigned, state_key)
+ values (:id, :content, :type, :sender, to_timestamp(:origin_server_timestamp), :room_id, :unsigned, :state_key)
+ SQL, [
+ "id" => $this->event->getId(),
+ "content" => json_encode($this->event->getContent()),
+ "type" => $this->event->getType()->value,
+ "sender" => $this->event->getSender(),
+ "origin_server_timestamp" => \DateTime::createFromTimestamp($this->event->getOriginServerTimestamp())->format("U.v"),
+ "room_id" => $this->event->getRoomId(),
+ "unsigned" => json_encode($this->event->getUnsigned()),
+ "state_key" => $this->event->getStateKey(),
+ ]);
+ }
+
+ return !! Database::getInstance()->query(<<<SQL
+ insert into room_events (id, content, type, sender, origin_server_timestamp, room_id, unsigned)
+ values (:id, :content, :type, :sender, to_timestamp(:origin_server_timestamp), :room_id, :unsigned)
+ SQL, [
+ "id" => $this->event->getId(),
+ "content" => json_encode($this->event->getContent()),
+ "type" => $this->event->getType()->value,
+ "sender" => $this->event->getSender(),
+ "origin_server_timestamp" => \DateTime::createFromTimestamp($this->event->getOriginServerTimestamp())->format("U.v"),
+ "room_id" => $this->event->getRoomId(),
+ "unsigned" => json_encode($this->event->getUnsigned()),
+ ]);
+ }
+}