Files
newznab-tmux/app/Observers/MovieInfoObserver.php
T
2026-04-09 17:16:17 +02:00

71 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Observers;
use App\Facades\Search;
use App\Models\MovieInfo;
use Illuminate\Support\Facades\Log;
class MovieInfoObserver
{
/**
* Handle the MovieInfo "created" event.
*/
public function created(MovieInfo $movie): void
{
$this->syncToSearchIndex($movie);
}
/**
* Handle the MovieInfo "updated" event.
*/
public function updated(MovieInfo $movie): void
{
$this->syncToSearchIndex($movie);
}
/**
* Handle the MovieInfo "deleted" event.
*/
public function deleted(MovieInfo $movie): void
{
try {
Search::deleteMovie($movie->id);
} catch (\Throwable $e) {
Log::error('MovieInfoObserver: Failed to delete movie from search index', [
'movie_id' => $movie->id,
'error' => $e->getMessage(),
]);
}
}
/**
* Sync the movie to the search index.
*/
private function syncToSearchIndex(MovieInfo $movie): void
{
try {
Search::insertMovie([
'id' => $movie->id,
'imdbid' => $movie->imdbid ?? '',
'tmdbid' => $movie->tmdbid ?? 0,
'traktid' => $movie->traktid ?? 0,
'title' => $movie->title ?? '',
'year' => $movie->year ?? '',
'genre' => $movie->genre ?? '',
'actors' => $movie->actors ?? '',
'director' => $movie->director ?? '',
'rating' => $movie->rating ?? '',
'plot' => $movie->plot ?? '',
]);
} catch (\Throwable $e) {
Log::error('MovieInfoObserver: Failed to sync movie to search index', [
'movie_id' => $movie->id,
'error' => $e->getMessage(),
]);
}
}
}