From 7726b3c3e05381d3703dd9b9f7c313046d79260a Mon Sep 17 00:00:00 2001 From: Richard Dern Date: Fri, 26 Apr 2024 23:05:49 +0200 Subject: [PATCH] Improved rendering and deploying times --- app/Classes/Bundle.php | 30 +++++++++++++++---- app/Classes/Traits/ManagesAttachments.php | 10 +++++-- app/Classes/Traits/ManagesMarkdown.php | 8 ++++- app/Classes/Traits/ManagesMetadata.php | 10 +++++-- app/Console/Commands/Bundle/Repair.php | 13 +++++--- .../Renderers/DossierRenderer.php | 2 +- .../Renderers/TermRenderer.php | 2 +- 7 files changed, 59 insertions(+), 16 deletions(-) diff --git a/app/Classes/Bundle.php b/app/Classes/Bundle.php index 4ddf0cc..e5e98cb 100644 --- a/app/Classes/Bundle.php +++ b/app/Classes/Bundle.php @@ -11,6 +11,7 @@ use Exception; use Illuminate\Filesystem\FilesystemAdapter; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use League\Flysystem\StorageAttributes; @@ -176,9 +177,14 @@ public function load(): void */ public function save(): void { - $this->saveAttachments(); - $this->saveMetadata(); - $this->saveMarkdown(); + if ( + $this->saveAttachments() + || $this->saveMetadata() + || $this->saveMarkdown() + ) { + $this->metadata()->set('lastModified', now()->toIso8601String()); + $this->saveMetadata(); + } } /** @@ -195,9 +201,23 @@ public function repair(): void public function render() { - $renderer = BundleRenderer::getBundleRendererFor($this); + $lastModified = Carbon::parse($this->metadata()->get('lastModified', '1970-01-02')); + $lastRendered = Carbon::parse($this->metadata()->get('lastRendered', '1970-01-01')); + $cacheKey = sprintf('render_%s', Str::slug($this->getPath())); - return $renderer->render(); + if ($lastRendered->gt($lastModified) && Cache::has($cacheKey)) { + return Cache::get($cacheKey); + } + + $renderer = BundleRenderer::getBundleRendererFor($this); + $result = $renderer->render(); + + $this->metadata()->set('lastRendered', now()->toIso8601String()); + $this->metadata()->save(); + + Cache::put($cacheKey, $result, now()->addMonth()); + + return $result; } public function renderCard() diff --git a/app/Classes/Traits/ManagesAttachments.php b/app/Classes/Traits/ManagesAttachments.php index 654d459..a3a67f1 100644 --- a/app/Classes/Traits/ManagesAttachments.php +++ b/app/Classes/Traits/ManagesAttachments.php @@ -54,11 +54,17 @@ private function loadAttachments() /** * Save all attachments files that needs to be */ - private function saveAttachments() + private function saveAttachments(): bool { + $allSaved = true; + foreach ($this->attachmentsManagers as $manager) { - $manager->save(); + if (!$manager->save()) { + $allSaved = false; + } } + + return $allSaved; } /** diff --git a/app/Classes/Traits/ManagesMarkdown.php b/app/Classes/Traits/ManagesMarkdown.php index ea04a2b..056dd21 100644 --- a/app/Classes/Traits/ManagesMarkdown.php +++ b/app/Classes/Traits/ManagesMarkdown.php @@ -45,9 +45,15 @@ private function loadMarkdown() */ private function saveMarkdown() { + $allSaved = true; + foreach ($this->markdownManagers as $manager) { - $manager->save(); + if (!$manager->save()) { + $allSaved = false; + } } + + return $allSaved; } /** diff --git a/app/Classes/Traits/ManagesMetadata.php b/app/Classes/Traits/ManagesMetadata.php index fc4117a..d7cd6c5 100644 --- a/app/Classes/Traits/ManagesMetadata.php +++ b/app/Classes/Traits/ManagesMetadata.php @@ -43,10 +43,16 @@ private function loadMetadata() /** * Save all metadata files that needs to be */ - private function saveMetadata() + private function saveMetadata(): bool { + $allSaved = true; + foreach ($this->metadataManagers as $manager) { - $manager->save(); + if (!$manager->save()) { + $allSaved = false; + } } + + return $allSaved; } } diff --git a/app/Console/Commands/Bundle/Repair.php b/app/Console/Commands/Bundle/Repair.php index 9310078..35c20b4 100644 --- a/app/Console/Commands/Bundle/Repair.php +++ b/app/Console/Commands/Bundle/Repair.php @@ -14,7 +14,7 @@ class Repair extends Command * * @var string */ - protected $signature = 'bundle:repair { path? : Specific bundle to repair }'; + protected $signature = 'bundle:repair { --r|recursive : Also repair sub-bundles } { path? : Specific bundle to repair }'; /** * The console command description. @@ -28,9 +28,14 @@ class Repair extends Command */ public function handle() { - $disk = Storage::disk(env('CONTENT_DISK')); - $path = $this->argument('path') ?? '/'; - $bundles = Bundle::findBundles($disk, $path, true); + $disk = Storage::disk(env('CONTENT_DISK')); + $path = $this->argument('path') ?? '/'; + + if ($this->option('recursive')) { + $bundles = Bundle::findBundles($disk, $path, true); + } else { + $bundles = [new Bundle($path, $disk)]; + } foreach ($bundles as $bundle) { $this->output->write(sprintf('Repairing %s... ', $bundle->getPath())); diff --git a/app/Services/BundleRenderers/Renderers/DossierRenderer.php b/app/Services/BundleRenderers/Renderers/DossierRenderer.php index 05c1e38..97ad073 100644 --- a/app/Services/BundleRenderers/Renderers/DossierRenderer.php +++ b/app/Services/BundleRenderers/Renderers/DossierRenderer.php @@ -20,7 +20,7 @@ public function render() data_set($this->viewData, 'showToc', true); data_set($this->viewData, 'dossier', $dossier); - return [$this->bundle->getPath() => view('article', $this->viewData)]; + return [$this->bundle->getPath() => (string) view('article', $this->viewData)]; } /** diff --git a/app/Services/BundleRenderers/Renderers/TermRenderer.php b/app/Services/BundleRenderers/Renderers/TermRenderer.php index 3f3f590..a245ab3 100644 --- a/app/Services/BundleRenderers/Renderers/TermRenderer.php +++ b/app/Services/BundleRenderers/Renderers/TermRenderer.php @@ -27,7 +27,7 @@ public function render() data_set($this->viewData, 'relations', $relations); - return [$this->bundle->getPath() => view('term', $this->viewData)]; + return [$this->bundle->getPath() => (string) view('term', $this->viewData)]; } /**