22
33declare (strict_types=1 );
44
5- namespace Limenet \LaravelElasticaBridge \Services ;
5+ namespace Limenet \LaravelElasticaBridge \Jobs ;
66
77use Elastic \Elasticsearch \Exception \ClientResponseException ;
8+ use Illuminate \Bus \Batchable ;
9+ use Illuminate \Bus \Queueable ;
10+ use Illuminate \Contracts \Queue \ShouldQueue ;
811use Illuminate \Database \Eloquent \Model ;
12+ use Illuminate \Foundation \Bus \Dispatchable ;
13+ use Illuminate \Queue \InteractsWithQueue ;
14+ use Illuminate \Queue \SerializesModels ;
915use Limenet \LaravelElasticaBridge \Index \IndexInterface ;
1016use Limenet \LaravelElasticaBridge \Model \ElasticsearchableInterface ;
1117use Limenet \LaravelElasticaBridge \Repository \IndexRepository ;
1218
13- class ModelEventListener
19+ class ModelEvent implements ShouldQueue
1420{
21+ use Batchable;
22+ use Dispatchable;
23+ use InteractsWithQueue;
24+ use Queueable;
25+ use SerializesModels;
26+
1527 private const EVENT_CREATED = 'created ' ;
1628
1729 private const EVENT_UPDATED = 'updated ' ;
@@ -30,9 +42,27 @@ class ModelEventListener
3042 self ::EVENT_DELETED ,
3143 ];
3244
33- public function handle (string $ event , Model $ model ): void
45+ /**
46+ * @template TModel of ElasticsearchableInterface&Model
47+ *
48+ * @param class-string<TModel> $modelClass
49+ * @param model-property<TModel> $keyName
50+ * @return void
51+ */
52+ public function __construct (
53+ private readonly string $ event ,
54+ private readonly string $ modelClass ,
55+ private readonly string $ keyName ,
56+ private readonly mixed $ keyValue
57+ ) {
58+ $ this ->onConnection (config ('elastica-bridge.connection ' ));
59+ }
60+
61+ public function handle (): void
3462 {
35- if (! $ model instanceof ElasticsearchableInterface) {
63+ $ model = $ this ->modelClass ::query ()->where ($ this ->keyName , $ this ->keyValue )->first ();
64+
65+ if (! $ model instanceof ElasticsearchableInterface || ! $ model instanceof Model) {
3666 return ;
3767 }
3868
@@ -43,7 +73,7 @@ public function handle(string $event, Model $model): void
4373
4474 $ shouldBePresent = true ;
4575
46- if (! $ model ->shouldIndex ($ index ) || $ event === self ::EVENT_DELETED ) {
76+ if (! $ model ->shouldIndex ($ index ) || $ this -> event === self ::EVENT_DELETED ) {
4777 $ shouldBePresent = false ;
4878 }
4979
0 commit comments