## İleti Yönetim Sistemi Mimarisi ## Event Collecting ```plantuml @startuml database event as "Opt-In, Opt-Out Events" component enrichW as "Enrichment Worker" database error as "Error Events" database consent as "Valid Consent Events" cloud hub as "Event Aggregater Hub" event --> enrichW enrichW --> consent enrichW --> error error --> (Notification) consent -> (Notification) enrichW --> hub note left of [event] İletim izni mesajlarının gelebileceği kanallar; * SMS çıkış * Mobile/Web IB * Şube Ekranları * IYS * Çıkış linkleri end note note left of [enrichW] Gelen talepleri işleyerek müşteri temel bilgileri ile zenginleştirir. end note note bottom of [hub] Talebin kabulu ile ilgili kullanıcı arabirimlerine bilgilendirme iletmek amacıyla beslenir. end note note bottom of [error] Eğer gelen talep * müşterimize ait değilse * numara, mail kayıtlı değilse ayrıca bilgilendirme yapılır. end note ``` ## Event Processing ```plantuml @startuml database i as "Valid Consent Event" component C { component c1 as "Pusula Updater Worker" component c2 as "dEngage Updater Worker" node a1 as "Pusula" node a2 as "dEngage" } database o as "Transation Event" i --> c1 i --> c2 c1 --> o c2 --> o c1 -> a1 c2 -> a2 component cu as "Transaction Event Correlator" database co as "Completed Events" o --> cu cu --> co @enduml ``` ## Inform Particiants ```plantuml @startuml database i as "Completed Events" component C { component c1 [ **Notification Worker** Alınan talebin işlendiği ile ilgili bilgilendirmenin talep sahibine iletişim kanalları üzerinden iletilmesi ] cloud c2 [ **Event Aggregater Hub** Senkron çalışması gereken UI uygulamalarını bilgilendirmek için oluşturulmuş özel bir kuyruk yapısı //(SignalR)// ] } i --> c1 i --> c2 @enduml ``` ## Enrichment Worker Detail Bu worker üzerinde işlenen tüm veriler arka planda bir DB içerisinde barındıracak ve farklı servisler de gerek duyduklarında burada oluşan zenginleştirilmiş müşteri verilerine erişebileceklerdir ## Mevcut Akış ## Dengage to Pusula (Codec => Pusula) ```plantuml @startuml start partition "Codec Servisi" { :Codec servis URL'sine bağlantı; note right URL: https://permission.codec.com.tr/PermApi.asmx end note :Servis kullanıcı bilgileri; note right Kullanıcı Bilgileri: - "registerUserNameBurgan": "LEASTEST" - "registerPasswordBurgan": "*****" - "registerUserNameOn": "ONIPTAL" - "registerPasswordOn": "*****" end note :RegisterAsync ve GetPermSmsAsync metodları çağırılır; :Gönderim izni olmayan telefon numaralarının listesi alınır; } partition "CustomerDB" { :CustomerDB'ye bağlanılır; note right Bağlantı Bilgileri: - Server: EBTCLUSCBSQL01 - Database: CustomerDB - User ID: DengagetoPusulaUser end note :Alınan numara listesi ile Permissions tablosunu güncelle; note right Güncelleme Sorgusu: update [dbo].[Permission] set IsChecked = 'H', LastModifiedBy = 'DENGAGE', RecordTime = GETDATE() where Id in ( select Id from CustomerTelephone (nolock) where TelephoneNumber = @TelephoneNumber and CityCode = @CityCode and TelephoneType IN (3,7,21,22,23) ) and ParentID = 500 end note } stop @enduml ``` 1. Codec servisine bağlantı: İlk adım, Codec servisine bağlanmaktır. Bu, belirli bir URL üzerinden gerçekleşir. Bu URL hem test hem de prod ortamları için https://permission.codec.com.tr/PermApi.asmx'dir. 2. Servis kullanıcı bilgilerini gir: Servise bağlanırken, kullanıcı kimlik bilgilerini sağlamanız gerekmektedir. Bu bilgiler kullanıcı adı ve şifre içerir ve hem test hem de prod ortamlarında aynı bilgiler kullanılıyor. 3. Metodları çağır: Serviste iki ana metod kullanılır: RegisterAsync ve GetPermSmsAsync. Bu metodlar, gönderim izni olmayan telefon numaralarını hazırlamak için çağrılır. 4. Telefon numarası listesini al: Gönderim izni olmayan telefon numaralarının bir listesi alınır. Bu, daha sonra CustomerDB'deki ilgili tabloya güncellenecek veriyi sağlar. 5. CustomerDB'ye bağlantı: Alınan numara listesi, CustomerDB'ye bağlandıktan sonra güncellenecek veriyi sağlar. Bu bağlantı, belirli kullanıcı kimlik bilgileri kullanılarak kurulur. 6. Permissions tablosunu güncelleme: Alınan numara listesi, CustomerDB'deki Permissions tablosuna güncellenir. Bu, bir SQL sorgusu kullanılarak gerçekleştirilir. Sorgu akışta not olarak gösterilmektedir. 7. Datalar çekilirken tarih'e göre çekilebiliyor. 8. Datalar günde 1 kere güncellenmektedir. ## Customer to Dengage (Pusula => Dengage) ```plantuml @startuml start :Kafka üzerinden '**CustomerChange** (CDC_Customer Worker'ı)' topiği dinlenir; if (10 kayıt alındı mı?) then (Evet) :10'luk gruplar halinde veriyi işlemeye başla; fork :Eğer 'BUSINESS_LINE' = 'X' ise, veriyi ON hesabına gönder; fork again :Diğer durumda, veriyi BURGAN hesabına gönder; end fork :Eğer 'UNIT_STATUS' = 2 ise, veriyi Dengage tablolarından sil; :'Customers', 'CustomerEmail', 'CustomerTelephone' tablolarında değişiklik varsa, izinleri 'True' olarak belirlenmiş veriyi Transactional hesaba gönder; :Veriler Dengage tarafında güncellenmiş olur; stop else (Hayır) :Daha fazla kayıt beklenir; endif @enduml ``` 1. Kafka "CustomerChange" Topiği Dinlenir: Bu süreç, "CustomerChange" adlı topiğin dinlenmesiyle başlar. 2. 10'lu Gruplar Halinde Veri İşlenir: Topikten alınan veri, 10'lu gruplar halinde işlenir. Verinin daha hızlı ve etkili bir şekilde işlenmesini sağlar. 3. "BUSINESS_LINE" Değeri Kontrol Edilir: Alınan her bir veri öğesi "BUSINESS_LINE" değerine göre işlenir. Eğer bu değer 'X' ise veri ON hesabına, değilse BURGAN hesabına gönderilir. 4. "UNIT_STATUS" Değeri Kontrol Edilir: Eğer bir veri öğesinin "UNIT_STATUS" değeri 2 ise, bu veri Dengage tablolarından silinir. 5. Tablolarda Değişiklik Olup Olmadığı Kontrol Edilir: "Customers", "CustomerEmail", "CustomerTelephone" alanlarında bir değişiklik olup olmadığı kontrol edilir. Eğer bir değişiklik varsa, bu veri Transactional hesaba gönderilir ve izinleri 'True' olarak belirlenir. 6. Veri Dengage Servisine Gönderilir: İlgili veri, belirli bir URL üzerinden Dengage servisine gönderilir. (https://test-dengage-restapi.apps.nonprod.ebt.bank/rest/) Bu servis, verinin işlenmesi ve saklanması için kullanılır. ## Dengage linki ile yapılan E-mail çıkışlarındaki permission'ların Pusulaya aktarılması ....... ```