Skip to content

setur/assessment-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Backend Assessment

Merhaba

Bu değerlendirme işe başvuru sürecindeki adaylar için hazırlanmış olup, katılacak kimselerin yaklaşım ve yetkinliklerini değerlendirmede bizlere yardımcı olmak için tasarlanmıştır.

Değerlendirme dahilinde; belirtilen süre içerisinde aşağıda kapsamı ve detayları belirlenmiş projeyi tamamlamanızı beklemekteyiz. Dikkat edebileceğiniz bir diğer husus ise, bizlerin doğru bir değerlendirme yapmamıza yardımcı olacak şekilde iletebileceğiniz en iyi çalışmayı bizlere teslim ediyor olmanız.

Senaryo

Birçok mikroservisin olduğu bir sistemde, diğer servislerde oluşan olay/eventleri toparlayacak yeni bir mikroservis oluşturacağız.

Yeni servisimiz üzerindeki tek REST API endpoint aracılığı ile diğer servislerden olayı detaylarıyla birlikte alacak ve Kafka'ya iletecek.

Kafka ise aldığı mesajları minimum 2 farklı sisteme dağıtacak. Bu iki sistemde de bu mesajları karşılamak yine bizim görevimiz olacak.

Teknik Tasarım

Diagram
  • Kaynak sistemde oluşan olay/eventler, oluşturulacak yeni bir servise HTTP kanalı üzerinden bir dizi/array biçiminde iletilecektir.

  • Servise iletilen her bir olay/event mesaj kuyruğuna bir mesaj nesnesi olarak eklenecektir.

  • Mesaj kuyruğu işlenirken mesajların yazıldığı kanalda n adet abone/subscriber olacak, Örneğin:

    • İlk abone olayı detayları ile ElasticSearch üzerine yazacak,

    • İkinci abone olayı Postgres’de oluşturulmuş tablo üzerine kaydedecek,

NOT: Değerlendirme ile ilgili beklentiler için Teknik Beklentiler bölümünü dikkatli okuyunuz.

Teknik Beklentiler

  • Kullanılacak Teknolojiler:

    • JavaScript veya .NET Core
    • Kafka
    • Docker
    • Git
  • Kısıtlamalar ve Gereksinimler:

    • Projenin sık commitlerle Git üzerinde geliştirilmesi
    • Git üzerinde master, development branchleri ve sürüm taglemelerinin kullanımı
    • Minimum %60 unit testing code coverage
    • Mesajları diğer servislerden toplayan ve kanallarda karşılayan tüm uygulamaların docker-compose dosyasına işlenmesi
    • docker-compose up komutu ile tüm sistemin ayağa kaldırılabilirliği
    • Projenin nasıl çalıştırılacağına dair README.md dokümantasyonu
  • Akış:

    • HTTP üzerinden oluşturulacak bir mikroservis oluşturularak aşağıdaki API yapısını benimsemesi sağlanmalı
    • Mikroservis mesajları ayağa kalkan bir Kafka'ya iletmeli
    • Kafka'daki mesajlar oluşturulacak başka mikroservisleri tetiklemeleri sağlanmalı
    • Minimum 2 servisin tetiklenmesi beklenmektedir
    • Tetiklenen servislerin diagram'da yer aldığı gibi Postgres ve Elastic Search'e yazmak yerine karşıladıkları mesajları console'a yansıtmaları yeterlidir

API

POST / - Event İletme

Request:

POST /
Content-Type: application/json

{
    "events": [
        {
            "app": "1231232-321312-12312321-21312",
            "type": "HOTEL_CREATE",
            "time": "2020-02-10T13:40:27.650Z",
            "isSucceeded": true,
            "meta": {
            },
            "user": {
                "isAuthenticated": true,
                "provider": "b2c-internal",
                "id": 231213,
                "e-mail": "eser.ozvataf@setur.com"
            },
            "attributes": {
                "hotelId": 4123,
                "hotelRegion": "Antalya",
                "hotelName": "Rixos"
            }
        }
    ]
}

Response:

HTTP 200 OK

Alanlar:

Alan Açıklama Tip Zorunluluk
app Guid cinsinden uygulamanın kimliği Guid Evet
type Event/olay kategorisi Enum Evet
time Olayın gerçekleştiği zaman DateTime Evet
isSucceeded İlgili olay başarıyla sonlanmış mı? Boolean Evet
meta.* Olaya ait ek detaylar Object Hayır
user.isAuthenticated Olayı gerçekleştiren kullanıcı giriş yapmış mı? Boolean Evet
user.provider Olayı gerçekleştiren kullanıcının kaydı hangi sistemde? String Evet
user.id Olayı gerçekleştiren kullanıcının id’si Any? Evet
user.e-mail Olayı gerçekleştiren kullanıcının e-mail bilgisi String Hayır
attributes.* Olaya kategorisine özel detaylar Object Hayır

Nasıl başlanabilir?

Bir proje tabanı oluşturarak başlayabilirsiniz. Yararlanmak isterseniz:

  • sample/ klasörü altında Kafka için bir docker-compose dosyası bulunuyor,

Ardından bu codebase'i bir git repository'sine aktarmanız, çalışma bitiminde de bu repository adresiyle paylaşmanız gerekecek.

Sorularınız

Değerlendirmelerle ilgili sorularınızı github@setur.com.tr adresine iletebilirsiniz.

Lisans

Apache 2.0 ile lisanslanmıştır.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published