---
# System prepended metadata

title: Notification izin aktarım süreci

---

# Notification izin aktarım süreci

Notification izin aktarım süreci, müşteri verilerinde meydana gelen değişiklikleri algılayan bir sistemdir. Bu süreçte, Qlik tarafından yapılan değişiklikler Kafka kuyruğuna yazılır ve NotificationWorker tarafından yakalanır. Müşteri numarası parse edildikten sonra NotificationServisine gönderilir ve müşteriye ait verilerin kayıtlarına bakılır. Eğer müşteri kaydı varsa, müşteri bilgileri izinleriyle birlikte Workerdan geri döndürülür ve Müşteri izinlerine göre, sms, mail veya push gönderimi Messaging Gateway aracılığıyla yapılır. Eğer müşteri kaydı yoksa, CustomerApi servisine müşteri numarası gönderilir ve kontrol sağlanır. Eğer müşteri kaydı varsa, müşteri bilgileri ile birlikte Workerdan geri döndürülür ve Müşteri izinlerine göre, sms, mail veya push gönderimi Messaging Gateway aracılığıyla yapılır. Eğer müşteri kaydı yoksa, süreç sonlanır. Bu süreç, müşteri bilgilerinin güncellenmesi ve izinlerinin yönetimi için bir mekanizma sağlar.

```plantuml
@startuml
start
:Değişiklikler Qlik tarafından algılanıp kafka topic’e yazılır;
:Kafka kuyruğunda bulunan kayıt NotificationWorker tarafından yakalanır;
:Kayıt içerisinde bulunan müşteri numarası parse edilir.;
:Alınan müşteri numarası NotificationServisine gönderilir;
:Notification servisinde gelen müşteri numarasına göre kayıtlara bakılır.;
if (Bu müşteriye ait bir kayıt var mı?) then (evet)
    :Müşteri bilgileri izinleri ile birlikte workera döner.;
else (hayır)
    :CustomerApi servisine müşteri numarası gönderilir ve kontrol sağlanır;
    if (Müşteri var mı?) then (evet)
        :Müşteri bilgileri ile dönüş yapılır.;
        if (Müşteriye ait izinler var mı?) then (evet)
            :Müşteri izinlerine bakılarak sms,mail,push gönderimi messaging gateway üzerinden yapılır;
        else (hayır)
            :Tüm izinleri aktif olacak şekilde oluşturulur. Müşteriye ait bilgiler yeni reminder veritabanına yazılır;
            :Müşteri izinlerine bakılarak sms,mail,push gönderimi messaging gateway üzerinden yapılır;
        endif
    else (hayır)
        stop
    endif
endif
stop
@enduml
```
| Adım | Açıklama |
|------|----------|
| 1    | Değişiklikler Qlik tarafından algılanıp kafka topic’e yazılır |
| 2    | Kafka kuyruğunda bulunan kayıt NotificationWorker tarafından yakalanır |
| 3    | Kayıt içerisinde bulunan müşteri numarası parse edilir |
| 4    | Alınan müşteri numarası NotificationServisine gönderilir |
| 5    | Notification servisinde gelen müşteri numarasına göre kayıtlara bakılır |
| 6    | İlk önce yeni veritabanına bakılır |
| 7    | Bu müşteriye ait bir kayıt varsa müşteri bilgileri izinleri ile birlikte workera döner |
| 8    | Eğer yok ise CustomerApi servisine müşteri numarası gönderilir ve kontrol sağlanır |
| 9    | O müşteri var ise müşteri bilgileri ile dönüş yapılır. Eğer müşteri yoksa süreç sonlanır |
| 10   | Müşteri var ise, Müşteriye ait izinler ise eski reminder veritabanındaki DG_REMINDER tablosundan sorgulanır |
| 11   | Eğer yeni bir müşteri ise izinleri yok ise (eski reminder da), tüm izinleri aktif olacak şekilde oluşturulur. Müşteriye ait bilgiler yeni reminder veritabanına  yazılır |
| 12   | Workerdan Notificationa müşteri numarası ile gelen istek müşteri bilgileri ile geri döner |
| 13   | Müşteri izinlerine bakılarak sms,mail,push gönderimi messaging gateway üzerinden yapılır |

## Notification izin güncelleme süreci

Bu süreç, eski (`reminder`) veritabanındaki değişiklikleri (`qlik`) ile izlemeyi ve değişikliklerin bir `kafka` topiğine yazılmasını içerir. Ardından, bir `worker` uygulaması bu topiği dinleyerek, yeni (`reminder`) verileri varsa veritabanında günceller. Bu süreç, reminderın güncel tutulmasını ve kullanıcılara daha doğru bildirimler gönderilmesini sağlamak için tasarlanmıştır.



```plantuml

@startuml
start
:DG_Reminder tablosunda değişiklik gerçekleşir;
if (Değişiklik Algılandı mı? (Qlik)) then (evet)
  :İlgili Kafka topiğine yazılır;
  :Worker topic dinlemesi yapılır;
  if (Kayıt var mı?) then (evet)
    :Yeni reminderdaki bilgiler güncellenir;
  endif
else (hayır)
  stop
endif
stop
@enduml


```

| Adım | Açıklama |
|------|----------|
| 1 | Eski reminder `DG_Reminder` tablosunda herhangi bir değişiklik olduğunda değişiklik `qlik` tarafından algılanır. |
| 2 | İlgili `kafka` topiğine yazılır. |
| 3 | `Worker` topic dinlemesi yapılır. |
| 4 | Kayıt var ise yeni `reminder`daki bilgileri günceller. |


## İzin Sunma ve Güncelleme (Revamp)

### İzinlerin gösterimi

#### Eski reminder izinleri gösterme


**Örnek Response**
```json=
{
    "showWithoutLogin": false,
    "reminders": [
        {
            "reminderType": "accountMoneyEntry",
            "reminderDescription": "Hesabıma para geldiğinde",
            "sms": true,
            "email": false,
            "mobileNotification": true,
            "amount": 0,
            "hasAmountRestriction": false
        },
        {
            "reminderType": "accountMoneyExit",
            "reminderDescription": "Hesabımdan para çıkışı olduğunda",
            "sms": true,
            "email": false,
            "mobileNotification": true,
            "amount": 0,
            "hasAmountRestriction": false
        },
        {
            "reminderType": "checkingAccountUpperLimitExceeded",
            "reminderDescription": "Vadesiz hesap bakiyesi üst limite çıktığında",
            "sms": true,
            "email": false,
            "mobileNotification": true,
            "amount": 100,
            "hasAmountRestriction": true
        },
        {
            "reminderType": "checkingAccountLowerLimitExceeded",
            "reminderDescription": "Vadesiz hesap bakiyesi alt limite düştüğünde",
            "sms": true,
            "email": false,
            "mobileNotification": true,
            "amount": 100,
            "hasAmountRestriction": true
        },
        {
            "reminderType": "riskyFutureTransfersAndPayments",
            "reminderDescription": "Bakiye yetersizliği nedeniyle ödenmeme riski taşıyan ileri tarihli para transferleri ve ödemelerde",
            "sms": false,
            "email": true,
            "mobileNotification": true,
            "amount": 0,
            "hasAmountRestriction": false
        },
        {
            "reminderType": "savingAccountDueDateReturn",
            "reminderDescription": "Vadeli mevduat hesap dönüşü",
            "sms": false,
            "email": true,
            "mobileNotification": true,
            "amount": 0,
            "hasAmountRestriction": false
        },
        {
            "reminderType": "cardRefund",
            "reminderDescription": "Banka Kartı İade Bildirimi",
            "sms": true,
            "email": false,
            "mobileNotification": true,
            "amount": 0,
            "hasAmountRestriction": false
        },
        {
            "reminderType": "cardReccurring",
            "reminderDescription": "Banka Kartı Talimatlı Ödeme",
            "sms": true,
            "email": false,
            "mobileNotification": true,
            "amount": 0,
            "hasAmountRestriction": false
        }
    ]
}
```

#### Notification üzerinden izin gösterimi

Revamp gösterimi için mock data veririz diye konuşuldu. Netleştirmek lazım.

**Not :** Source üzerinde parent oluşturup, gerekirse alt kırılımları gösteriliyor olacak

### İzin güncelleme

#### Eski reminder üzerinde izin güncelleme

Servis veri tabanında ilgili **SP([REM].[DG_REMINDER_INSERT])** ile izim güncellemesi gerçekleştiriyor. SP ile İzin güncellemesi gerçekleştiğinde tüm izinler silinip yeniden ekleniyor.

#### Notification izin güncelleme

??? Burada ilk etapta source parent'a göre alt kırılım izinler güncellenebilir. (İzin kontrolü olmayan gönderimler dışında)

Notification'da tanımlı senaryolar güncellenebilir. Ancak eski reminder da devam eden senaryolar için güncelleme nasıl olmalı ? 


### Ek geliştirmeler

* Müşteri hesapları özelinde bildirim için farklı iletişim kanalı tanımlayabilecek
    * Senaryo özelinde bu özellik aktif edilebilecek
        * Gosterme kullaniciya
        * Goster ama degisitirmesine izin verme
        * goster ve izini degisitirmesine izin ver
        * parametresi varsa parametreleride degisti9rmesine izin ver
        * eposta ve telefon belirleyebilsin ve degistirebilsin
    
```csharp=
public enum SourceDisplayType
    {
        NotDisplay = 1,
        Display = 2,
        DisplaySetSwitch = 3,
        DisplayAndSetSwitchParameters = 4,
        DisplayAndSetSwitchParametersChannelsInfo = 5,
    }
```

* İzinsiz gönderimler için filter kullanılabilir diye konuşuldu, netleştirmek lazım
* Source'da retention alanı saniye tutulup, rententionJson ile kafkadan alınacak time alanı dinamik tutulabilecek.
* SMS gönderilmeyecek zaman aralığı şu an Qlick ile task durdurup başlatarak çözülecek
    * Cron job ile yönetilmesi konuşuldu.

* ProcessItemIdPath olarak belirtilen alan ProcessItemIdJsonPath olarak gösterilmeli




