Activity Log Aktiviteleri

Sadece activity_log Tablosunda Tutulan Aktiviteler

32 Observer Analiz 30 Aktif İmplementasyon Eksikler Tespit Edildi

📊 Ö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.

30
Aktif Model
12
Eksik Model
5
Event Tipi
100%
Observer Pattern

📝 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.

Örnek:

"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?

Müzik İşlemleri (6 Model):
  • • Ş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
İçerik Yönetimi (6 Model):
  • • Sayfa oluşturma, düzenleme
  • • Blog yazısı yayınlama
  • • Portföy öğesi ekleme
  • • Duyuru yapma
  • • Favori listeleri
  • • İnceleme sistemleri
E-Ticaret İşlemleri (3 Model):
  • • Ürün ekleme, fiyat değiştirme
  • • Kupon kodu oluşturma
  • • Ödeme kayıtları
Diğer İşlemler (1 Model):
  • • Hizmet tanımları

Kayıt Edilmeyen İşlemler (ÖNEMLİ!)

Kullanıcı Aktiviteleri:

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.

Dinleme Aktiviteleri:

Şarkı dinleme kayıtları activity_log'da değil, özel bir tabloda (song_plays) tutuluyor. Bu daha doğru bir yöntem.

Bazı Modeller Eksik:

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)"
}
Önemli Not:

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
Not:

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
Özel Durum (Song):

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
Eksik Event:

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
Eksik Event (Payment):

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!)

Önemli Bulgu:

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
Nerede Tutuluyor?

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
💡 Öneri:

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.