Current state with latest updates
This commit is contained in:
@@ -6,6 +6,7 @@ namespace App\Observers;
|
||||
|
||||
use App\Events\Achievements\AchievementCheckRequested;
|
||||
use App\Models\Artwork;
|
||||
use App\Jobs\GenerateFeaturedArtworkThumbnailsJob;
|
||||
use App\Jobs\RecComputeSimilarByTagsJob;
|
||||
use App\Jobs\RecComputeSimilarHybridJob;
|
||||
use App\Jobs\Posts\AutoUploadPostJob;
|
||||
@@ -15,6 +16,7 @@ use App\Services\Profile\CreatorJourneyService;
|
||||
use App\Services\UserStatsService;
|
||||
use App\Services\XPService;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
/**
|
||||
* Syncs artwork documents to Meilisearch on every relevant model event.
|
||||
@@ -61,6 +63,25 @@ class ArtworkObserver
|
||||
|
||||
$this->indexer->update($artwork);
|
||||
|
||||
// A changed hash/extension means any previously persisted
|
||||
// featured_thumbnail_variants_json now refers to the WRONG object paths (they
|
||||
// were computed from the old hash) — the variant names would still read as
|
||||
// "available" while pointing at objects that don't exist under the new hash,
|
||||
// which would surface as a broken hero image. Reset the audit state immediately
|
||||
// (via a direct query, not a model save, to avoid re-entering this observer) so
|
||||
// hasFeaturedThumbnail() safely reports "not audited" until the queued job below
|
||||
// re-verifies and repopulates it; the public homepage never blocks on that check.
|
||||
if ($artwork->wasChanged(['hash', 'file_ext'])) {
|
||||
DB::table('artworks')->where('id', $artwork->id)->update([
|
||||
'featured_thumbnail_variants_json' => null,
|
||||
'featured_thumbnails_checked_at' => null,
|
||||
]);
|
||||
|
||||
if (! empty($artwork->hash) && ! empty($artwork->file_ext) && $artwork->features()->exists()) {
|
||||
GenerateFeaturedArtworkThumbnailsJob::dispatch((int) $artwork->id, true);
|
||||
}
|
||||
}
|
||||
|
||||
// §7.5 On-demand: recompute similarity when tags/categories could have changed.
|
||||
// The pivot sync happens outside this observer, so we dispatch on every
|
||||
// meaningful update and let the job be idempotent (cheap if nothing changed).
|
||||
@@ -146,7 +167,7 @@ class ArtworkObserver
|
||||
|
||||
private function shouldClearFeaturedCaches(Artwork $artwork): bool
|
||||
{
|
||||
if (! $artwork->wasChanged(['published_at', 'is_public', 'is_approved', 'deleted_at', 'has_missing_thumbnails'])) {
|
||||
if (! $artwork->wasChanged(['published_at', 'is_public', 'is_approved', 'deleted_at', 'has_missing_thumbnails', 'hash', 'file_ext'])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user