namespace BookStack\Exports;
use BookStack\Activity\Models\Loggable;
+use BookStack\Exports\ZipExports\Models\ZipExportBook;
+use BookStack\Exports\ZipExports\Models\ZipExportChapter;
+use BookStack\Exports\ZipExports\Models\ZipExportPage;
use BookStack\Users\Models\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
* @property string $path
* @property string $name
* @property int $size - ZIP size in bytes
- * @property int $book_count
- * @property int $chapter_count
- * @property int $page_count
+ * @property string $type
+ * @property string $metadata
* @property int $created_by
* @property Carbon $created_at
* @property Carbon $updated_at
{
use HasFactory;
- public const TYPE_BOOK = 'book';
- public const TYPE_CHAPTER = 'chapter';
- public const TYPE_PAGE = 'page';
-
- /**
- * Get the type (model) that this import is intended to be.
- */
- public function getType(): string
- {
- if ($this->book_count === 1) {
- return self::TYPE_BOOK;
- } elseif ($this->chapter_count === 1) {
- return self::TYPE_CHAPTER;
- }
-
- return self::TYPE_PAGE;
- }
-
public function getSizeString(): string
{
$mb = round($this->size / 1000000, 2);
{
return $this->belongsTo(User::class, 'created_by');
}
+
+ public function decodeMetadata(): ZipExportBook|ZipExportChapter|ZipExportPage|null
+ {
+ $metadataArray = json_decode($this->metadata, true);
+ return match ($this->type) {
+ 'book' => ZipExportBook::fromArray($metadataArray),
+ 'chapter' => ZipExportChapter::fromArray($metadataArray),
+ 'page' => ZipExportPage::fromArray($metadataArray),
+ default => null,
+ };
+ }
}