Ana içeriğe geç

Observer'lar

Eloquent observer'lar, model lifecycle olaylarını (creating/created/updating/updated/deleting/deleted/restored/forceDeleted) global olarak yakalayıp ek işlem yapar. BulutFilo'da 6 observer kayıtlıdır.


1. TransferObserver

Yol: Modules/AracDetay/App/Observers/TransferObserver.php
Dinlediği model: Transfer

OlayYaptığı
creatingHedef bölge ve alt bölgenin yüklenici firma unvanını otomatik doldurur (transfer_edilen_bolge_yuklenici_firma, transfer_edilen_alt_bolge_yuklenici_firma).
savingTürkçe formatlı tarihleri DB formatına çevirir (Helper::tarih_to_db).
created(1) Hareket (audit) kaydı oluşturur. (2) feature-logo-rest-ambar-transferi flag açıksa VE transfer_durumu = 'Bölgeye Alındı' ise → AmbarTransferAktarimJob dispatch eder.
updatedHareket kaydı oluşturur.

Tetiklenen Job:

  • App\Jobs\Logo\AmbarTransferAktarimJob — Logo ERP'ye ambar transferi REST çağrısı atar.

2. HistoryObserver

Yol: Modules/Sistem/App/Observers/HistoryObserver.php
Dinlediği model: Globale uygulanır — HistoryTrait kullanan tüm modeller.

OlayYaptığı
createdSnapshot ('created')
updatedSnapshot ('updated')
deleting(Pivot model özel durumu) Pivot model ise refresh() sonrası snapshot ('deleting')
deletedSnapshot ('deleted')
restoredSnapshot ('restored')
forceDeletedSnapshot ('force-deleted')

Tüm değişiklikler History tablosuna ve Snapshot mekanizması üzerinden değişen alanlar zaman damgalı olarak yazılır. Detay için bkz: Audit & Snapshot


3. SnapshotObserver

Yol: Modules/Kullanici/App/Observers/SnapshotObserver.php
Dinlediği model: Globale uygulanır.

OlayYaptığı
created / updated / deleted / restored / forceDeletedSnapshot::makeSnapshot($model, $event) çağırır.

Hariç tutulan modeller (sonsuz döngüyü ve ekspertizdeki büyük JSON snapshot'ı önlemek için):

  • Snapshot (kendi)
  • Ekspertiz
  • AracEkspertiz
  • AracEkspertizDetay

4. PersonelKartObserver

Yol: Modules/Kullanici/App/Observers/PersonelKartObserver.php
Dinlediği model: PersonelKart

OlayYaptığı
createdİlgili personelin kart_hareketleri tablosuna yeni hareket ekler: baslangic_tarihi = now(), kart_id = $kart->kart_id.
deletedAynı kart_id'li hareketin bitiş tarihini now() olarak günceller.

Yani personele kart atandığında otomatik bir kart geçmişi açılır, kart silindiğinde geçmiş kapanır. Bu sayede personelin geçmişte hangi kartı kullandığı tam izlenebilir.


5. KuponKoduObserver

Yol: Modules/Finans/App/Observers/KuponKoduObserver.php
Dinlediği model: KuponKodu

OlayYaptığı
creatingilk_miktar = miktar (orijinal miktar saklanır)
createdİlgili hareketler tablosuna GIRIS türünde otomatik hareket ekler.
updatingmiktar değişmişse: ilgili kuponun çıkış hareketinden YetkiliServis formuna bağlı kayıt varsa kullaniliyor_mu = 1.
updatedMiktar değişmişse, fark kadar ana kuponun birim_toplam değerini günceller (artırma/azaltma).

6. YetkiliServisKuponKoduHareketiObserver

Yol: Modules/Finans/App/Observers/YetkiliServisKuponKoduHareketiObserver.php
Dinlediği model: YetkiliServisKuponKodu

OlayYaptığı
createdYetkili servis formunda kupon kodu kullanımını kaydeder.
updatingHareket güncellenmesi öncesi geçerlilik kontrolleri.
deletedYetkili servis kupon hareketi silindiğinde temizlik.

Observer Yan Etkilerinin Sayısal Özeti

ObserverYan Etki SayısıEn Önemli Yan Etki
TransferObserver4Logo ERP'ye REST job dispatch
HistoryObserver6Tüm modellerin değişiklik geçmişi
SnapshotObserver5(HistoryObserver'la birlikte) Snapshot tablosu
PersonelKartObserver2Kart geçmişi otomatik açıp kapanır
KuponKoduObserver4Kupon ana toplamı otomatik senkron
YetkiliServisKuponKoduHareketiObserver3Kupon kullanım takibi

Observer Kayıt Yeri

Observer'lar Service Provider'lar üzerinden modellere bağlanır:

// Modules/.../Providers/EventServiceProvider.php
Transfer::observe(TransferObserver::class);
PersonelKart::observe(PersonelKartObserver::class);
KuponKodu::observe(KuponKoduObserver::class);
// ...

HistoryObserver ve SnapshotObserver ise HistoryTrait içinde static::observe() ile kaydolur — bu trait'i kullanan her model otomatik olarak audit log'a yazılır.