From b8acb478b0d2ddd8346455aa3dc8691bf9139d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Helge-Mikael=20Nordg=C3=A5rd?= Date: Mon, 5 May 2025 15:09:04 +0200 Subject: [PATCH] PageBuilder models --- app/Models/Page.php | 54 ++++++++++++++++++++++++++++++++++++ app/Models/PageRevision.php | 55 +++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 app/Models/Page.php create mode 100644 app/Models/PageRevision.php diff --git a/app/Models/Page.php b/app/Models/Page.php new file mode 100644 index 0000000..626d45a --- /dev/null +++ b/app/Models/Page.php @@ -0,0 +1,54 @@ + 'array', + 'is_published' => 'boolean', + 'main' => 'boolean', + 'linked' => 'boolean', + ]; + + protected static function boot() { + parent::boot(); + static::creating(function ($page) { + $page->uuid = (string) Str::uuid(); + }); + } + + public function activeRevision(){ + return $this->hasOne(PageRevision::class)->where('active', true); + } + + public function author() { + return $this->belongsTo(User::class, 'user_id'); + } + + public function revisions() { + return $this->hasMany(PageRevision::class); + } +} diff --git a/app/Models/PageRevision.php b/app/Models/PageRevision.php new file mode 100644 index 0000000..a532f3b --- /dev/null +++ b/app/Models/PageRevision.php @@ -0,0 +1,55 @@ + 'array', + ]; + + protected static function boot() { + parent::boot(); + static::creating(function ($revision) { + $revision->uuid = (string) Str::uuid(); + + if (!$revision->version) { + $latestVersion = self::where('page_id', $revision->page_id)->max('version') ?? 0; + $revision->version = $latestVersion + 1; + } + }); + } + + public function getRouteKeyName(): string { + return 'uuid'; + } + + public function page() { + return $this->belongsTo(Page::class); + } + + public function editor() { + return $this->belongsTo(User::class, 'user_id'); + } +}