✨ Proje Özeti ve Ana Mimarisi
Bu proje, modern ve ölçeklenebilir bir sunucu mimarisi olan **Node.js** ve **Express.js** kullanılarak geliştirilmiş, tam özellikli bir Blog Yönetim Sistemi (CMS) örneğidir. Projenin ana odağı, veri bütünlüğünü sağlayan **Sequelize ORM Transaction** yönetimi ve kullanıcıları yetki seviyelerine göre ayıran **Rol Tabanlı Erişim Kontrolü (RBAC)** mekanizmasıdır.
Kullanılan Temel Teknolojiler:
- Node.js (Sunucu Ortamı)
- Express.js (Web Çerçevesi)
- Sequelize ORM (Veri Tabanı)
- RBAC (Rol Tabanlı Yetkilendirme)
- Multi-Table Transactions
- File System (Dosya Yönetimi)
- Session Management
Uygulama Görsel Galerisi
Projenin ana arayüzleri, yönetim panelleri ve kullanıcıya özel bölümleri aşağıdaki galeri yapısında incelenebilir. Geçişler **ileri/geri ok tuşları** ile yapılır.
1. Kritik Çözüm: Rol Tabanlı Erişim ve Moderasyon Akışı
Uygulamanın güvenliğini ve iş akışını yöneten temel mekanizma, kullanıcı rollerine (Admin, User) dayalı kararlar almaktır. Bu sayede içerik yayınlama süreci moderasyon altına alınmıştır.
Admin/Kullanıcı Bazlı Onay Mantığı
Yeni bir blog kaydı yapılırken yazarın rolü kontrol edilir:
- **Admin veya SuperAdmin:** Blog anında yayınlanır.
- **Normal Kullanıcı (Yazar):** Blog, Admin onayı beklemek üzere taslak olarak kaydedilir .
Yeniden Moderasyon Zorunluluğu
Kullanıcı deneyimini etkileyen önemli bir kural içerir: **Normal bir yazar kendi blogunda bir değişiklik yaptığında, blogun onay durumu otomatik olarak tekrar(Onay Bekliyor) durumuna çekilir.** Bu, yayınlanmış içeriğin kalitesini veya güvenliğini bozacak değişikliklerin Admin denetiminden kaçmasını engeller.
Blog Edit Yetkilendirmesi
Blog düzenleme yetkisi için katı bir kontrol uygulanır: Blog'u düzenlemek isteyen kişinin ya blogun sahibi olması ya da Admin/SuperAdmin rolüne sahip olması gerekir.
2. Veri Bütünlüğü ve Atomik İşlemler (Transactions)
Veri tabanında birden fazla tabloyu etkileyen karmaşık işlemlerin (CRUD) tek bir başarılı birim olarak işlenmesini sağlamak için Sequelize Transaction mekanizması kullanılmıştır.
Blog Oluşturma/Güncelleme (Transaction)
Blog kaydı ve kategori ilişkilendirmesi (Çoğa-Çok İlişki) tek bir Transaction içinde yapılır. Eğer kategori ataması sırasında bir hata oluşursa, blog kaydı da geri alınır böylece veritabanında "sahipsiz" veya eksik ilişkili kayıt kalmaz.
Güvenli Blog Silme (Multi-Record Transaction)
Silme işleminin en karmaşık ve kritik örneğidir:
- Fiziksel Resim Silme.
- İlişkili **Yorumları** silme.
- İlişkili **Görüntüleme Kontrollerini** silme.
- Kategori ilişkilerini koparma.
- Blog kaydını silme.
Tüm bu adımlar tek bir Transaction içerisinde yürütülerek, blog silindiğinde ilişkili tüm kayıtların ve fiziksel dosyaların silinmesi kesinleştirilir.
3. Dosya ve URL Yönetimi
Sunucu tarafında resim dosyalarının güvenli bir şekilde yönetilmesi ve kullanıcı dostu URL yapısının oluşturulması sağlanmıştır.
Eski Resimleri Otomatik Silme
Yeni bir resim yüklendiğinde, veritabanında kayıtlı olan eski resmin sunucudaki fiziksel konumundan silinmesini sağlar. Bu, disk alanı israfını ve "zombi" dosya birikimini önleyen temel bir temizlik mekanizmasıdır.
URL (Slug) Yönetimi
Blog başlığından otomatik olarak SEO dostu, küçük harfli ve özel karakterlerden arındırılmış bir URL (`slug`) oluşturulur. Düzenleme sırasında, kullanıcı bir URL girmezse, mevcut URL korunur veya başlıktan yeniden oluşturulur. Ayrıca, URL'nin veritabanında **benzersiz** olma kısıtlaması, post_blog_edit hata yönetiminde özel olarak yakalanır.
4. Performans ve Kullanıcı Deneyimi Çözümleri
AJAX Tabanlı Dinamik Blog Listeleme
Kullanıcının profilindeki blogları **AJAX** (Asynchronous JavaScript and XML) aracılığıyla getirir. Bu yaklaşım, sayfanın tamamını yenilemeden (server-side rendering yerine client-side rendering) sadece listeyi güncelleyerek daha hızlı ve akıcı bir kullanıcı deneyimi sunar.
Verimli Sayfalama (Pagination)
AJAX çağrısı, hem blogları hem de toplam kayıt sayısını tek bir sorguda çeker. Bu, toplam sayfa sayısının verimli bir şekilde hesaplanmasını sağlar ve performansı artırır.
SweetAlert2 Geri Bildirimi
Tüm CRUD işlemleri (güncelleme, oluşturma, silme) sonrası, kullanıcıya standart `alert` yerine modern ve dikkat çekici bir arayüze sahip **SweetAlert2** bildirimi sunulması için oturum bazlı mesaj sistemi kullanılmıştır.