Bu proje, n11 TalentHub Backend Bootcamp'inin final projesidir. Apache Solr üzerine inşa edilmiş bir restoran öneri sistemi içerir. Mikroservis mimarisi uygulanarak geliştirilmiştir.
LinkedIn: Selim Şahin
LeetCode: selimsahin
GitHub: selimsahindev
Email: selimsahin.sns@gmail.com
- Unit ve Integration testleri yazıldı.
- Her temel servisin kendi veritabanı bulunuyor.
- Kafka ile asenkron mesajlaşma sağlandı.
- Loglar için MongoDB kullanılıyor.
- Eureka service discovery yapısı hazırlandı.
- Next.js ile oluşturulmuş basit bir önyüze sahip.
- docker-compose.yml dosyası hazırlandı.
- Swagger API dokümantasyonu eklendi.
- Postman üzerinden denenebilir.
Projeyi Docker
kullanarak nasıl çalıştırabileceğinizi öğrenmek için Docker bölümünü inceleyiniz.
API adreslerini Postman ile deneyebilirsiniz: Postman API 🚀
Aşağıda projeye ait mikroservislerin listesi bulunmaktadır.
📦 User Service
📦 Restaurant Service
📦 Recommendation Service
🐝 Log Aggregation Service
⛩️ API Gateway
🌐 Eureka Service Discovery
Projeyi çalıştırmak için Docker kullanabilirsiniz. Docker sayfasından docker'ı indirebilirsiniz.
- Terminalinizi açın ve projenin ana dizinine gidin.
docker-compose up -d
komutunu çalıştırın.- Tüm servislerin başlatılmasını bekleyin. (Epey sürebilir, sabırlı olun...)
- Tüm servislerin başlatıldığını gördüğünüzde, API kullanılabilir durumda demektir (umarım)
- Next.js projesini çalıştırmak için bir sonraki adımda yer alan Next.js bölümüne bakınız.
Kapatmak için terminalinizden projenin ana dizinine gidin ve docker-compose down
komutunu çalıştırın.
Projeyi çalıştırmak için Docker'ın yeterli olacağını düşünüyorum. Ancak, önyüz projesini çalıştırmak için Node.js ve npm gerekecektir.
Next.js projesi, basit bir önyüz sunar. Bu önyüz, kullanıcıların kendilerine yakın restoran önerilerini ve diğer restoranları görmelerini sağlar.
- Terminalinizi açın ve projenin ana dizinine gidin.
cd nextjs-frontend
komutunu çalıştırarak önyüz projesinin dizinine gidin.npm install
komutunu çalıştırın gerekli paketlerin yüklenmesini bekleyin.npm run dev
komutunu çalıştırarak önyüz projesini başlatın.- Tarayıcınızda
http://localhost:3000
adresine gidin.
Bu noktaya geldiyseniz harika! Artık projeyi kullanabilirsiniz. 🎉🎉🎉
Dokümanın ilerleyen kısımlarında API dokümantasyonu ve servis açıklamaları yer alıyor.
Kullanıcı Servisi - User Service
Kullanıcı modülü, kendine ait bir PostgreSQL veritabanı kullanarak kullanıcı verisiyle ilgili sorumluluklarını yerine getiren bir temel (foundational) mikroservistir.
Servis sınıfıyla mikroservislerin karışmaması adına onları ".java" olarak belirttim.
UserService (UserService.java)
Kullanıcı servisi, kullanıcı yönetimi ile ilgilenir. Kullanıcı oluşturma ve silme ve güncelleme işlemlerini sağlar.
Method | Adres | Açıklama |
---|---|---|
GET |
user-service/api/v1/users |
Kullanıcıları getir |
GET |
user-service/api/v1/users/{id} |
Kullanıcı id'si ile getir |
POST |
user-service/api/v1/users |
Yeni bir kullanıcı oluştur |
PUT |
user-service/api/v1/users/{id} |
Kullanıcıyı güncelle |
DELETE |
user-service/api/v1/users/{id} |
Kullanıcıyı sil |
UserReviewService (UserReview.java)
Kullanıcı yorumları servisi, kullanıcıların restoranlar hakkında yaptığı yorumları yönetir. Kullanıcı yorumları oluşturma, silme ve güncelleme işlemlerini sağlar.
Method | Adres | Açıklama |
---|---|---|
GET |
user-service/api/v1/user-reviews |
Kullanıcı yorumlarını getir |
GET |
user-service/api/v1/user-reviews/{id} |
Kullanıcı yorum id'si ile getir |
GET |
user-service/api/v1/user-reviews/by-user?userId={id} |
Kullanıcı id'si ile yorumları getir |
POST |
user-service/api/v1/user-reviews |
Yeni bir kullanıcı yorumu oluştur |
Restoran Servisi - Restaurant Service
Method | Adres | Açıklama |
---|---|---|
GET |
user-sevice/api/v1/restaurants |
Restoranları getir |
GET |
user-sevice/api/v1/restaurants/{id} |
Restoran id'si ile getir |
POST |
user-sevice/api/v1/restaurants |
Yeni bir restoran oluştur |
DELETE |
user-sevice/api/v1/restaurants/{id} |
Restoranı sil |
Öneri Servisi - Recommendation Service
Öneri servisi, kullanıcıların restoranlar hakkında yaptığı yorumları ve konumlarını kullanarak restoran önerileri sunar. Bu önerileri sunarken Apache Solr kullanır.
Method | Adres | Açıklama |
---|---|---|
GET |
recommendation-service/api/v1/search/restaurants |
Solr'daki tüm restoranları getir |
GET |
/api/v1/search/restaurants/by-location-near?location={latitude},{longitude} |
Belirtilen konuma yakın en fazla üç restoranı getir |
Log Toplama Servisi - Log Aggregation Service
Log toplama servisi, diğer mikroservislerden üretilen hata ve bilgi loglarını toplar ve MongoDB veritabanına kaydeder. Bunlara erişmek için bir API sunar. MongoDB veritabanınızı yönetmek için projede Mongo Express de bulunuyor. Detaylı bilgi almak için Mongo Express bölümüne bakınız.
Method | Adres | Açıklama |
---|---|---|
GET |
log-aggregation-service/api/v1/info-logs |
Bilgi loglarını getir |
GET |
log-aggregation-service/api/v1/error-logs |
Hata loglarını getir |
API Gateway - API Gateway
API Gateway, diğer mikroservislerin API'lerini tek bir noktadan erişilebilir hale getirir. Ayrıca servislerin bulunduğu adresleri Eureka üzerinden alır.
Eureka Sunucusu - Eureka Server
Eureka sunucusu, diğer mikroservislerin kayıt olduğu ve bulunduğu adresleri tutan bir servistir. API Gateway, Eureka üzerinden diğer servislerin adreslerini alır.
MongoDB veritabanınızı yönetmek için kullanabileceğiniz bir web tabanlı arayüzdür.
- Docker projeniz ayaktayken tarayıcınızda
http://localhost:8081
adresine gidin. - Varsayılan kullanıcı adı ve parola
admin
:pass
şeklindedir. - MongoDB veritabanınızı seçin ve yönetmeye başlayın.
Bu sayfada kullanıcılar, yakınlarında bulunan ve ortalama puanı en yüksek olan üç restoranı görebilirler.
Bu sayfasda, kullanıcıların var olan tüm restoranları keşfedebilecekleri bir liste bulunur.
İçimizi ısıtan bir register sayfası...
LinkedIn: Selim Şahin
LeetCode: selimsahin
GitHub: selimsahindev
Email: selimsahin.sns@gmail.com