diff options
Diffstat (limited to 'src/Models/RoomEvent.php')
| -rw-r--r-- | src/Models/RoomEvent.php | 64 |
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()), + ]); + } +} |
