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
| Olay | Yaptığı |
|---|---|
creating | Hedef bölge ve alt bölgenin yüklenici firma unvanını otomatik doldurur (transfer_edilen_bolge_yuklenici_firma, transfer_edilen_alt_bolge_yuklenici_firma). |
saving | Tü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. |
updated | Hareket 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.
| Olay | Yaptığı |
|---|---|
created | Snapshot ('created') |
updated | Snapshot ('updated') |
deleting | (Pivot model özel durumu) Pivot model ise refresh() sonrası snapshot ('deleting') |
deleted | Snapshot ('deleted') |
restored | Snapshot ('restored') |
forceDeleted | Snapshot ('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.
| Olay | Yaptığı |
|---|---|
created / updated / deleted / restored / forceDeleted | Snapshot::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)EkspertizAracEkspertizAracEkspertizDetay
4. PersonelKartObserver
Yol: Modules/Kullanici/App/Observers/PersonelKartObserver.php
Dinlediği model: PersonelKart
| Olay | Yaptığı |
|---|---|
created | İlgili personelin kart_hareketleri tablosuna yeni hareket ekler: baslangic_tarihi = now(), kart_id = $kart->kart_id. |
deleted | Aynı 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
| Olay | Yaptığı |
|---|---|
creating | ilk_miktar = miktar (orijinal miktar saklanır) |
created | İlgili hareketler tablosuna GIRIS türünde otomatik hareket ekler. |
updating | miktar değişmişse: ilgili kuponun çıkış hareketinden YetkiliServis formuna bağlı kayıt varsa kullaniliyor_mu = 1. |
updated | Miktar 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
| Olay | Yaptığı |
|---|---|
created | Yetkili servis formunda kupon kodu kullanımını kaydeder. |
updating | Hareket güncellenmesi öncesi geçerlilik kontrolleri. |
deleted | Yetkili servis kupon hareketi silindiğinde temizlik. |
Observer Yan Etkilerinin Sayısal Özeti
| Observer | Yan Etki Sayısı | En Önemli Yan Etki |
|---|---|---|
| TransferObserver | 4 | Logo ERP'ye REST job dispatch |
| HistoryObserver | 6 | Tüm modellerin değişiklik geçmişi |
| SnapshotObserver | 5 | (HistoryObserver'la birlikte) Snapshot tablosu |
| PersonelKartObserver | 2 | Kart geçmişi otomatik açıp kapanır |
| KuponKoduObserver | 4 | Kupon ana toplamı otomatik senkron |
| YetkiliServisKuponKoduHareketiObserver | 3 | Kupon 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.