## İ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ı
.......
```