Wire admin studio SSR and search infrastructure
This commit is contained in:
63
app/Services/Sitemaps/SitemapStaticPublisher.php
Normal file
63
app/Services/Sitemaps/SitemapStaticPublisher.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Services\Sitemaps;
|
||||
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
/**
|
||||
* Writes every document from a published release to the public disk so nginx
|
||||
* can serve sitemap.xml and sitemaps/{name}.xml as plain static files,
|
||||
* bypassing PHP entirely on subsequent requests.
|
||||
*/
|
||||
final class SitemapStaticPublisher
|
||||
{
|
||||
public function __construct(private readonly SitemapReleaseManager $releases)
|
||||
{
|
||||
}
|
||||
|
||||
public function enabled(): bool
|
||||
{
|
||||
return (bool) config('sitemaps.static_publish.enabled', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy all documents from the given release to the public disk.
|
||||
*
|
||||
* @return array{written: int, skipped: int}
|
||||
*/
|
||||
public function publish(string $releaseId): array
|
||||
{
|
||||
$manifest = $this->releases->readManifest($releaseId);
|
||||
|
||||
if ($manifest === null) {
|
||||
return ['written' => 0, 'skipped' => 0];
|
||||
}
|
||||
|
||||
$disk = Storage::disk($this->publicDisk());
|
||||
$documents = (array) ($manifest['documents'] ?? []);
|
||||
|
||||
$written = 0;
|
||||
$skipped = 0;
|
||||
|
||||
foreach ($documents as $documentName => $relativePath) {
|
||||
$content = $this->releases->getDocument($releaseId, (string) $documentName);
|
||||
|
||||
if (! is_string($content) || $content === '') {
|
||||
$skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
$disk->put((string) $relativePath, $content);
|
||||
$written++;
|
||||
}
|
||||
|
||||
return ['written' => $written, 'skipped' => $skipped];
|
||||
}
|
||||
|
||||
private function publicDisk(): string
|
||||
{
|
||||
return (string) config('sitemaps.static_publish.disk', 'sitemaps_public');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user