📊 Özet Durum
Sisteminizde activity_log tablosu
30 farklı model üzerindeki işlemleri kayıt altına alıyor.
Ancak kullanıcı aktiviteleri (login, logout, profil güncelleme)
henüz bu tabloya yazılmıyor.
📝 Basit Anlatım (Herkes İçin)
Activity Log Nedir?
Activity log, sistemdeki tüm önemli değişiklikleri kaydeden bir günlük defteri gibidir. Kim, ne zaman, hangi işlemi yaptı? Hangi bilgiler değişti? Bu sorulara cevap verir.
"Ahmet kullanıcısı, 30 Ocak 2026 saat 15:30'da 'Yağmur Yağar' isimli şarkının başlığını değiştirdi. Eski başlık: 'Yağmur', Yeni başlık: 'Yağmur Yağar'"
Hangi İşlemler Kayıt Ediliyor?
- • Şarkı ekleme, düzenleme, silme
- • Albüm oluşturma, güncelleme
- • Sanatçı bilgileri değiştirme
- • Playlist oluşturma, düzenleme
- • Müzik türü (genre) yönetimi
- • Muzibu kategorileri
- • Sayfa oluşturma, düzenleme
- • Blog yazısı yayınlama
- • Portföy öğesi ekleme
- • Duyuru yapma
- • Favori listeleri
- • İnceleme sistemleri
- • Ürün ekleme, fiyat değiştirme
- • Kupon kodu oluşturma
- • Ödeme kayıtları
- • Hizmet tanımları
Kayıt Edilmeyen İşlemler (ÖNEMLİ!)
Kullanıcıların giriş/çıkış, profil güncelleme, şifre değiştirme gibi işlemleri şu anda activity_log'a kayıt edilmiyor. Bu bilgiler başka tablolarda (user_active_sessions, users) tutuluyor.
Şarkı dinleme kayıtları activity_log'da değil, özel bir tabloda
(song_plays) tutuluyor. Bu daha doğru bir yöntem.
Menü yönetimi, mail şablonları, abonelik planları gibi bazı modellerde Observer var ama henüz log kaydı yapılmıyor.
Bu Kayıtlar Neden Önemli?
-
Geri Alınabilirlik: Bir hata yapılırsa, ne değiştiğini görüp geri alabilirsiniz
-
Sorun Çözme: "Bu şarkının başlığı kim değiştirdi?" gibi soruları cevaplayabilirsiniz
-
Güvenlik Denetimi: Yetkisiz değişiklikleri tespit edebilirsiniz
-
İstatistikler: Hangi içerikler en çok düzenleniyor? Kim en aktif?
🔧 Teknik Detaylar (Geliştiriciler İçin)
log_activity() Helper Fonksiyonu
Tüm aktivite kayıtları /app/Helpers/Functions.php
dosyasındaki log_activity() fonksiyonu ile yapılıyor.
// Fonksiyon İmzası
function log_activity(
\Illuminate\Database\Eloquent\Model $model,
string $event, // 'oluşturuldu', 'güncellendi', 'silindi'...
?array $degisenler = null, // Değişen alanlar listesi
$old_title = null // Eski başlık (varsa)
): void
// Properties JSON Yapısı
{
"baslik": "Model başlığı (title/name alanından)",
"modul": "Model class ismi (Song, Album, Page...)",
"degisenler": ["field1", "field2", "field3"],
"event_key": "oluşturuldu / güncellendi / silindi",
"eski_baslik": "Eski başlık (güncelleme/silme için)"
}
updated_at alanı otomatik olarak değişen alanlar listesinden çıkarılıyor,
çünkü her güncellemede zaten değişir.
Event Tipleri
| Event (İngilizce) | Türkçe | Ne Zaman Tetiklenir | Kullanım |
|---|---|---|---|
created |
oluşturuldu | Yeni kayıt ekleme | ✓ Tüm Observer |
updated |
güncellendi | Mevcut kayıt değiştirme | ✓ Çoğu Observer |
deleted |
silindi | Soft delete (geçici silme) | ✓ Çoğu Observer |
restored |
geri yüklendi | Silinmiş kayıt geri alma | ✓ Çoğu Observer |
forceDeleted |
kalıcı silindi | Kalıcı silme (geri alınamaz) | ⚠ Bazı Observer |
Bazı modellerde (Favorite, ReviewSystem, Payment) forceDeleted
eventi loglanmıyor. Sadece warning mesajı yazılıyor.
Müzik Modülü (6 Model)
| Model | Açıklama | Observer Dosyası | Durum |
|---|---|---|---|
| Song | Şarkılar (title, duration, album_id, genre_id, is_active...) | SongObserver.php |
✓ Tam |
| Album | Albümler (title, artist_id, description, is_active...) | AlbumObserver.php |
✓ Tam |
| Artist | Sanatçılar (name, bio, is_active...) | ArtistObserver.php |
✓ Tam |
| Playlist | Çalma listeleri (title, description, is_public...) | PlaylistObserver.php |
✓ Tam |
| Genre | Müzik türleri (title, slug, is_active...) | GenreObserver.php |
✓ Tam |
| Muzibu | Özel müzik kategorileri (title, slug...) | MuzibuObserver.php |
✓ Tam |
play_count alanındaki değişiklikler
bilinçli olarak loglanmıyor. Çünkü her dinlemede bu alan değişir
ve activity_log çok şişer. Dinleme kayıtları ayrı bir tabloda
(song_plays) tutuluyor.
İçerik Modülü (6 Model)
| Model | Açıklama | Observer Dosyası | Durum |
|---|---|---|---|
| Page | Sayfalar (title, content, is_active, is_homepage...) | PageObserver.php |
✓ Tam |
| Blog | Blog yazıları (title, body, excerpt, category_id...) | BlogObserver.php |
✓ Tam |
| Portfolio | Portföy öğeleri (title, description, category_id...) | PortfolioObserver.php |
✓ Tam |
| Announcement | Duyurular (title, content, is_active, published_at...) | AnnouncementObserver.php |
✓ Tam |
| Favorite | Favori listeleri (title, slug, description...) | FavoriteObserver.php |
⚠ Kısmi |
| ReviewSystem | İnceleme sistemleri (title, slug, is_active...) | ReviewSystemObserver.php |
⚠ Kısmi |
Favorite ve ReviewSystem modellerinde forceDeleted
eventi loglanmıyor. Diğer tüm event'ler (created, updated, deleted, restored) tam çalışıyor.
E-Ticaret Modülü (3 Model)
| Model | Açıklama | Observer Dosyası | Durum |
|---|---|---|---|
| ShopProduct | Ürünler (title, price, is_active, category_id...) | ShopProductObserver.php |
✓ Tam |
| Coupon | Kuponlar (code, discount_amount, is_active, valid_until...) | CouponObserver.php |
✓ Tam |
| Payment | Ödemeler (amount, status, payment_method...) | PaymentObserver.php |
⚠ Kısmi |
Payment modelinde sadece created,
deleted ve restored
event'leri loglanıyor. updated ve
forceDeleted loglanmıyor.
Diğer Modüller (1 Model)
| Model | Açıklama | Observer Dosyası | Durum |
|---|---|---|---|
| Service | Hizmetler (title, description, category_id, is_active...) | ServiceObserver.php |
✓ Tam |
Eksik İmplementasyonlar (12 Model)
Bu modeller için Observer dosyası mevcut, ancak log_activity()
çağrısı henüz yapılmıyor:
Müzik Modülü:
- •
Radio- Radyo istasyonları - •
Sector- Sektörler - •
MuzibuCategory- Muzibu kategorileri - •
MuzibuCorporateAccount- Kurumsal hesaplar - •
CorporateSpot- Kurumsal spotlar - •
Certificate- Sertifikalar - •
PlaylistSong- Playlist-şarkı ilişkisi
Diğer Modüller:
- •
BlogCategory- Blog kategorileri - •
PortfolioCategory- Portföy kategorileri - •
ShopCategory- Ürün kategorileri - •
ShopBrand- Ürün markaları - •
SubscriptionPlan- Abonelik planları - •
MailTemplate- Mail şablonları - •
Menu- Menüler - •
MenuItem- Menü öğeleri
Kullanıcı Aktiviteleri (KRİTİK EKSİK!)
User modeli için Observer bulunmamaktadır.
Bu nedenle kullanıcı aktiviteleri activity_log'a yazılmıyor.
Şu anda activity_log'a kayıt edilmeyen kullanıcı aktiviteleri:
- Login - Giriş yapma
- Logout - Çıkış yapma
- Profil Güncelleme - İsim, email, telefon değişikliği
- Şifre Değiştirme - Password update
- Email Doğrulama - Email verification
- Role Atama - Rol değişikliği
- Permission Değişiklikleri - Yetki değişikliği
- 2FA Aktivasyonu - İki faktörlü doğrulama
Bu bilgiler şu anda başka tablolarda saklanıyor:
- •
user_active_sessions- Login/logout ve session bilgileri - •
users.last_login_at- Son giriş zamanı - •
users.failed_login_attempts- Başarısız giriş denemeleri
Örnek Activity Log Kayıtları
1. Şarkı Oluşturma (created):
{
"log_name": "Song",
"description": "oluşturuldu",
"subject_type": "App\\Models\\Song",
"subject_id": 123,
"causer_type": "App\\Models\\User",
"causer_id": 5,
"event": "created",
"properties": {
"baslik": "Yağmur Yağar",
"modul": "Song",
"degisenler": [],
"event_key": "oluşturuldu",
"eski_baslik": null
},
"created_at": "2026-01-30 15:30:00"
}
2. Şarkı Güncelleme (updated):
{
"log_name": "Song",
"description": "güncellendi",
"subject_type": "App\\Models\\Song",
"subject_id": 123,
"causer_type": "App\\Models\\User",
"causer_id": 5,
"event": "updated",
"properties": {
"baslik": "Yağmur Yağar Hep",
"modul": "Song",
"degisenler": {
"changed_fields": ["title", "duration", "is_active"]
},
"event_key": "güncellendi",
"eski_baslik": "Yağmur Yağar"
},
"created_at": "2026-01-30 16:45:00"
}
3. Albüm Silme (deleted):
{
"log_name": "Album",
"description": "silindi",
"subject_type": "App\\Models\\Album",
"subject_id": 45,
"causer_type": "App\\Models\\User",
"causer_id": 1,
"event": "deleted",
"properties": {
"baslik": "İlk Albüm",
"modul": "Album",
"degisenler": [],
"event_key": "silindi",
"eski_baslik": "İlk Albüm"
},
"created_at": "2026-01-30 17:00:00"
}
Dosya Konumları
log_activity() Helper:
/app/Helpers/Functions.php (Satır 330-401)
Observer Dosyaları:
/Modules/[ModülAdı]/App/Observers/[ModelAdı]Observer.php
Örnek: /Modules/Muzibu/App/Observers/SongObserver.php
Örnek: /Modules/Page/App/Observers/PageObserver.php
Örnek: /Modules/Shop/App/Observers/ShopProductObserver.php
Activity Log Config:
/config/activitylog.php
Migration:
/database/migrations/*_create_activity_log_table.php
Admin Panel Components:
/Modules/UserManagement/App/Http/Livewire/ActivityLogComponent.php
/Modules/UserManagement/App/Http/Livewire/UserActivityLogComponent.php
📊 Özet Tablo - Tüm Modeller
| Model | Created | Updated | Deleted | Restored | ForceDeleted | Durum |
|---|---|---|---|---|---|---|
| MÜZİK MODÜLÜ | ||||||
| Song | ✓ Tam | |||||
| Album | ✓ Tam | |||||
| Artist | ✓ Tam | |||||
| Playlist | ✓ Tam | |||||
| Genre | ✓ Tam | |||||
| Muzibu | ✓ Tam | |||||
| İÇERİK MODÜLÜ | ||||||
| Page | ✓ Tam | |||||
| Blog | ✓ Tam | |||||
| Portfolio | ✓ Tam | |||||
| Announcement | ✓ Tam | |||||
| Favorite | ⚠ Kısmi | |||||
| ReviewSystem | ⚠ Kısmi | |||||
| E-TİCARET MODÜLÜ | ||||||
| ShopProduct | ✓ Tam | |||||
| Coupon | ✓ Tam | |||||
| Payment | ⚠ Kısmi | |||||
| DİĞER MODÜLLER | ||||||
| Service | ✓ Tam | |||||
| EKSİK İMPLEMENTASYONLAR | ||||||
| User (Kullanıcı) | ❌ Yok | |||||
| 12 Diğer Model | ⚠ Eksik | |||||
🎯 Sonuç ve Öneriler
Sisteminizde activity_log
tablosu 30 model üzerinde aktif olarak çalışıyor.
İçerik yönetimi, müzik işlemleri ve e-ticaret aktiviteleri kapsamlı şekilde kayıt altına alınıyor.
✅ Güçlü Yönler:
- • Observer pattern ile otomatik log'lama
- • Değişen alanlar detaylıca kaydediliyor
- • Eski/yeni değer karşılaştırması
- • Multi-language desteği
- • Soft delete ve restore takibi
❌ Kritik Eksikler:
- • User aktiviteleri loglanmıyor!
- • Login/logout kayıtları yok
- • Profil güncelleme takibi yok
- • 12 modelde implementasyon eksik
- • Bazı modellerde forceDeleted yok
Kullanıcı aktivitelerini de activity_log'a dahil etmek için bir UserObserver
oluşturulmalı. Bu sayede tüm sistem aktiviteleri tek bir yerden takip edilebilir.