Kişisel Kitaplık
Kişisel Kitaplık, yazar ve kitap kayıtlarını düzenleyen yerel bir eğitim uygulaması. İlişkisel katalog verilerini PostgreSQL'de, kitaplara bağlı not ve alıntıların API altyapısını MongoDB'de ele alarak iki veri modelinin sorumluluklarını ayırıyor.
- Teknolojiler
- React · Vite · Express · PostgreSQL · MongoDB

Problem
Kitap ve yazar kataloglarını, okuma durumunu ve kitaplara bağlı notları bir kitaplık akışında düzenlemek.
Çözüm
Kitaplığım ve Yazarlar arayüzleri mevcut. Not ve alıntılar için Express API altyapısı var; okuma günlüğünün React ekranı henüz eklenmedi.
Teknik karar
Katalog PostgreSQL'de, not ve alıntılar MongoDB'de tutuluyor. bookId ilişkisini uygulama servisi denetliyor; bağlı kayıt varken silme reddediliyor. İki veritabanı ortak transaction sağlamıyor.
Mevcut sınırlar
Tek kullanıcılı yerel eğitim uygulaması. Günlük arayüzü ve erişim kontrolü eksik; silme öncesi kontrol eşzamanlı işlemlerde yarış koşulu taşıyabiliyor. Bu ayrımın maliyeti ayrıca değerlendirilmelidir.
Ekranlar ve doğrulama kapsamı
İki ekran kitap ve yazar yönetimini gösteriyor. Kaynak kodu veri modelleri ve silme kurallarını incelemeye açık; günlük arayüzü veya eşzamanlılık testi sonucu gösterilmiyor.
Projenin hikâyesi ve uygulama ayrıntıları
Kişisel Kitaplık, kitap ve yazarları düzenlemek, okuma durumunu izlemek ve kitaplara bağlı notları ele almak için kurulmuş yerel eğitim uygulaması. Projenin teknik odağı, katalog gibi düzenli ilişkileri PostgreSQL'de, not ve alıntı gibi daha esnek kayıtları MongoDB'de yönetmek. Kullanıcı açısından hedef, iki farklı veri modelini ayrı ürünler gibi hissettirmeden tek kitaplık akışında birleştirmek.
Mevcut React arayüzünde Kitaplığım ve Yazarlar ekranları var. Kitaplar eklenip düzenlenebiliyor, aranabiliyor, okunacak/okunuyor/tamamlandı durumuna göre filtrelenebiliyor ve sayfalarda gezilebiliyor. Yazar listesinde kayıt oluşturma, düzenleme ve silme işlemleri bulunuyor. Ekran görüntüleri bu iki tamamlanmış yüzeyi gösteriyor. Okuma günlüğü için React ekranı henüz eklenmedi; not ve alıntı oluşturma, listeleme, güncelleme ve silme işlemleri backend API tarafında ele alınıyor.
İstemci veritabanlarına doğrudan bağlanmıyor; HTTP istekleri Express backend'de route, controller, service ve repository katmanlarından geçiyor. Kitap ve yazarların kimlikleri, ilişkileri ve okuma durumu PostgreSQL tablolarında; günlük kayıtlarının içerik, tür, isteğe bağlı sayfa numarası ve etiketleri MongoDB dokümanlarında tutuluyor. MongoDB kaydındaki bookId, PostgreSQL kitap UUID'sine işaret ediyor; bu ilişkiyi veritabanları arasında otomatik bir foreign key değil, uygulama servisi denetliyor.
Günlük kaydı eklenmeden önce kitabın varlığı kontrol ediliyor; günlük işlemlerinde hem kitap kimliği hem not kimliği kullanılarak başka kitabın kaydına yanlışlıkla erişim önleniyor. Günlük kaydı bağlıysa kitap silme reddediliyor, yazarın bağlı kitabı varsa PostgreSQL kısıtı silmeyi durduruyor. MongoDB erişimi başarısız olduğunda durum boş günlük gibi gösterilmiyor. Böylece veri kaybı ve yanlış eşleşmeler için açık iş kuralları oluşturulmuş oluyor.
Proje tek kullanıcılı, yerel geliştirme kapsamına göre tasarlanmış; hesap veya yetkilendirme sistemi yok. PostgreSQL ile MongoDB arasında ortak transaction da bulunmuyor ve silme öncesi kontrol eşzamanlı işlemlerde yarış koşulu taşıyabiliyor. Günlük ekranının tamamlanması, hata durumlarının arayüzde daha ayrıntılı gösterilmesi ve ileride arşivleme ya da idempotent eşitleme akışı bu mimarinin sonraki adımları. Bu sınırları açık tutmak, tamamlanmış arayüz ile API'de hazır olan kısmı ayırt ediyor.