Audit & Snapshot — Değişiklik Geçmişi
BulutFilo'da iki ayrı katman kayıt değişikliklerini takip eder:
| Katman | Kapsam | Tablo | Kim Tetikler |
|---|---|---|---|
Hareket (kullanici_hareketleri) | Yüksek seviyeli olay log'u — "X kullanıcı Y ekranda Z işlemini yaptı" | kullanici_hareketleri | Model boot hook'ları ve TransferObserver elle çağırır |
| Snapshot (model değişiklik geçmişi) | Alan-bazlı değişiklik — "X alanı eski değerden yeni değere geçti" | snapshots | SnapshotObserver + HistoryObserver (HistoryTrait) otomatik |
Hareket Sistemi
App\Models\Kullanici\Hareket modeli, kullanıcı eylem log'unu tutar. Her kayıt:
| Alan | Açıklama |
|---|---|
aciklama | İnsan-okur özet (örn. "Yeni ceza kaydı oluşturuldu.") |
link | İlgili kayda doğrudan link (örn. route('arac.ceza.detay', [...])) |
user_id | Eylemi yapan kullanıcı (otomatik) |
created_at | Zaman |
Hareket Yazıcı Yerler
Bunlar şu an doğrulanmış (tüm liste değil):
| Modül | Olay | Açıklama |
|---|---|---|
Sigorta | created | "Yeni araç sigorta kaydı oluşturuldu." |
Sigorta | updated | "Araç sigorta kaydı güncellendi." |
Sigorta | deleted | "Araç sigorta kaydı silindi - {id}" |
Ceza | created | "Yeni ceza kaydı oluşturuldu." |
Ceza | updated | "Ceza kaydı güncellendi." |
Ceza | deleted | "Ceza kaydı silindi - {id}" |
Transfer (TransferObserver) | created | "Yeni araç transfer kaydı oluşturuldu." |
Transfer (TransferObserver) | updated | "Araç transfer kaydı güncellendi." |
Yakit | (HistoryTrait üzerinden) | Otomatik snapshot |
Kaza | (HistoryTrait varsa) | Otomatik snapshot |
Görüntülenecek yer: Sol Menü → Kullanıcı Yönetimi → Kullanıcı Hareketleri (
/kullanici/request-logs).
Snapshot Sistemi
Modules\Kullanici\App\Models\Snapshot her model değişikliğinde alan-bazlı diff tutar.
Mekanizma
Kullanıcı bir kaydı değiştirir
│
▼
Eloquent updated() event'i fırlar
│
▼
SnapshotObserver::updated() yakalar
│
▼
Snapshot::makeSnapshot($model, 'updated') çağrılır
│
▼
Model'in değişen alanları + eski/yeni değerler
│
▼
snapshots tablosuna yazılır
HistoryTrait
Bir model HistoryTrait kullanırsa, bu trait boot() içinde static::observe(HistoryObserver::class) ekler. Doğrulanmış kullanıcılar:
| Model | HistoryTrait |
|---|---|
Sigorta | ✓ |
Yakit | ✓ |
| Diğer modeller | (kontrol edilmeli) |
Snapshot'tan Hariç Tutulan Modeller
SnapshotObserver aşağıdakileri dışarıda bırakır:
| Model | Sebep |
|---|---|
Snapshot | Sonsuz döngü |
Ekspertiz | Çok büyük JSON snapshot, performans |
AracEkspertiz | Aynı |
AracEkspertizDetay | Aynı |
Görüntülenecek Yer
Sol Menü → Kullanıcı Yönetimi → İşlem Kayıtları (/snapshot/logs).
Pivot Tablosu Özel Durumu
HistoryObserver::deleting() özel bir kontrol içerir:
if (get_parent_class($model::class) == Pivot::class) {
$model = $model->refresh(); // Pivot'larda silme öncesi attribute'lar erişilemez (Laravel 2024-Ekim)
$this->makeSnapshot($model, 'deleting');
}
Yorum (kod içinde): "Pivot modellerde deleted eventinde, attributelara ulaşmak şuanlık mümkün değil (2024-Ekim). Bu sebeple pivot classlarda deleting eventinde model refresh edilir."
Bu sayede ceza_ceza_maddeleri_pivot, ceza_yansitmalar_cezalar gibi pivot kayıtların silme tarihi de log'a düşer.
Audit'in Pratik Kullanımı
| Soru | Nereye bakılır |
|---|---|
| "X aracın sigortasını kim, ne zaman değiştirdi?" | İşlem Kayıtları (/snapshot/logs) — model: Sigorta, ilgili arac_id filtresi |
| "Kullanıcı Y bugün hangi ekranlarda iş yaptı?" | Kullanıcı Hareketleri (/kullanici/request-logs) — user_id = Y, tarih filtresi |
| "Z personel kartı geçmişte kimde miydi?" | Personel detay → Personel Kart Geçmişi (PersonelKartObserver bunu otomatik üretir) |
| "Z numaralı ceza yanlışlıkla silindi mi?" | İşlem Kayıtları → model: Ceza, deleted event filtresi |