Birbirleri ile haberleşen minimum iki microservice'in olduğu bir yapıdır. Basit bir telefon rehberi uygulaması ve konuma göre telefon rehberinin raporlanması sağlanmıştır.
Proje docker ortamında docker compose ile çalışabilmektedir.
docker compose up : Bu komutu proje ana dizini içerisinde çalıştırarak projeyi ayağa kaldırabilirsiniz.
docker compose down : container'ları silmek için kullanabilirsiniz. Image'lar silinmez.
API Contact Service Endpoint (CONTACT_SERVICE_ENDPOINT) : https://localhost:5001/
API Report Service Endpoint (REPORT_SERVICE_ENDPOINT) : https://localhost:5101/
Kişi listeleme: [HttpGet] [CONTACT_SERVICE_ENDPOINT]/api/Persons/GetPersons
Kişi detayları: [HttpGet] [CONTACT_SERVICE_ENDPOINT]/api/Persons/GetPerson
Kişi ekleme: [HttpPost] [CONTACT_SERVICE_ENDPOINT]/api/Persons/CreatePerson
Kişi silme: [HttpDelete] [CONTACT_SERVICE_ENDPOINT]/api/Persons/DeletePerson
İletişim bilgisi ekleme: [HttpPost] [CONTACT_SERVICE_ENDPOINT]/api/Persons/CreateContactInformation
İletişim bilgisi silme: [HttpDelete] [CONTACT_SERVICE_ENDPOINT]/api/Persons/DeleteContactInformation
Rapor listeleme: [HttpGet] [REPORT_SERVICE_ENDPOINT]/api/Reports/GetReports
Rapor detayları: [HttpGet] [REPORT_SERVICE_ENDPOINT]/api/Reports/GetReport
Rapor talep oluşturma: [HttpPost] [CONTACT_SERVICE_ENDPOINT]/api/Reports/CreateReport
Sistemde asenkron iletişim Masstransit kütüphanesi ve RabbitMQ ile yapılmaktadır. Eventlerin produce ve consume edilmesin de Outbox ve Inbox pattern kullanılmıştır. Contact ve Report servislerin de PostgreSQL veritabanı kullanılmıştır. Her iki servis için ayrı ayrı veritabanı oluşturulmuştur. Servislerin gelişime açık ve esnek bir mimari olması için Clean Architecture uygulanmıştır. Her bir serviste unit testler XUnit ile yazılmıştır.
Kullanılan teknolojiler
- .Net Core
- PostgreSQL
- Git
- RabbitMQ
- Entity Framework Core
- Dapper
- FluentValidation
- MediatR
- MassTransit
- Quartz
- Scrutor
- Mapster
- FluentAssertions
- NSubstitute
Kullanılan Design Patternler
- Repository
- Unit Of Work
- CQRS
- Outbox ve Inbox Pattern