size / 1000000, 2); return "{$mb} MB"; } /** * Get the URL to view/continue this import. */ public function getUrl(string $path = ''): string { $path = ltrim($path, '/'); return url("/import/{$this->id}" . ($path ? '/' . $path : '')); } public function logDescriptor(): string { return "({$this->id}) {$this->name}"; } public function createdBy(): BelongsTo { 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, }; } }