# Transaction Notifications
## Architecture Diagram
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
title Transaction Notifications - Architecture Diagram
Person(brand_admin, "Brand / Stockiest")
System_Boundary(brand_web_system, "Brand Administration Web Application") {
Container(brand_web, "Browser", "Software System", "All supported browser")
Container(brand_app, "Brand Administration Web Application", "Nuxt.js", "Provides brand management functionalities to brand admin via their web browser")
}
System_Boundary(api_endpoint, "API Endpoint") {
Container(evm_brand, "evm-brand API", "Golang", "Provides brand management functionalities via HTTPS / REST / JSON API")
Container(evm_notification, "evm-notification API", "Golang", "Provides notifications functionalities via HTTPS / REST / JSON API")
}
ContainerDb(db_evm_notification, "Database", "MySQL", "evm_notification schema")
Rel_R(brand_admin, brand_web, "View dashboard", "Client Device")
Rel_R(brand_web, brand_app, "Access", "HTTPS")
Rel(brand_app, evm_brand, "Makes API calls to", "HTTPS / REST / JSON")
Rel_L(evm_brand, evm_notification, "Makes API calls to", "HTTPS / REST / JSON")
Rel(evm_notification, db_evm_notification, "Reads from & Writes to", "TCP/IP")
```
## Architecture Diagram (Worker)
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
title Worker Partner Notification - Architecture Diagram
System(cronjobs, "Cronjobs")
Container(evm_partner_notif, "evm-partner-notif-worker", "Golang", "Provides Partner Worker Notification functionalities via HTTPS / REST / JSON API")
System_Boundary(cronjob_system_push, "Evermos Cronjobs System (Push Notif)") {
Container(partner_notif_worker_daily_reminder, "partner-notif-worker-daily-reminder", "bash", "Provides cron job daily reminder at midnight 3:15AM & Processing data 72 hours ago .")
Container(partner_notif_worker_new_order, "partner-notif-worker-new-order", "bash", "Provides cron job new order every 30 minutes & Processing data 30 minutes ago.")
}
System_Boundary(cronjob_system_pull, "Evermos Cronjobs System (Pull Notif)") {
Container(partner_pullnotif_new_order, "partner-pullnotif-new-order", "bash", "Provides cron job pull notification new order every one minutes & Processing data 1 minutes ago.")
Container(partner_pullnotif_old_order, "partner-pullnotif-old-order", "bash", "Provides cron job pull notification old order every 10 minutes & Processing data 72 hours ago.")
}
System_Boundary(api_endpoint, "API Endpoint") {
Container(evm_notif_publisher, "evm-notif-publisher API", "Golang", "Provides notification publisher functionalities via HTTPS / REST / JSON API")
Container(evm_notification, "evm-notification API", "Golang", "Provides notification managements functionalities via HTTPS / REST / JSON API")
}
ContainerDb(db_evm_notification, "Database", "MySQL", "evm_notification schema")
ContainerDb(db_notification, "Database", "MySQL", "notification schema")
ContainerDb(db_evm, "Database", "MySQL", "evm schema")
ContainerDb(db_itr, "Database", "MySQL", "itr schema")
System(onesignal, "One Signal")
ContainerDb(redis, "Memory Data", "Open Source", "Redis")
Rel(cronjobs, evm_partner_notif, "Access", "HTTPS")
Rel(evm_partner_notif, partner_notif_worker_daily_reminder, "Access", "HTTPS")
Rel(evm_partner_notif, partner_notif_worker_new_order, "Access", "HTTPS")
Rel(evm_partner_notif, partner_pullnotif_new_order, "Access", "HTTPS")
Rel(evm_partner_notif, partner_pullnotif_old_order, "Access", "HTTPS")
Rel(partner_notif_worker_daily_reminder, evm_notif_publisher, "Makes API calls to", "HTTPS / REST / JSON")
Rel(partner_notif_worker_new_order, evm_notif_publisher, "Makes API calls to", "HTTPS / REST / JSON")
Rel(partner_pullnotif_new_order, evm_notification, "Makes API calls to", "HTTPS / REST / JSON")
Rel(partner_pullnotif_new_order, redis, "Store Data", "Access")
Rel(partner_pullnotif_old_order, redis, "Get Data", "Access")
Rel(partner_pullnotif_old_order, evm_notification, "Makes API calls to", "HTTPS / REST / JSON")
Rel(evm_notif_publisher, db_notification, "R", "TCP/IP")
Rel(evm_notif_publisher, onesignal, "R & W", "TCP/IP")
Rel(evm_notification, db_evm_notification, "W", "TCP/IP")
Rel_L(evm_partner_notif, db_evm, "R & W", "TCP/IP")
Rel_R(evm_partner_notif, db_itr, "R & W", "TCP/IP")
```
## Process Flow
```plantuml
skinparam responseMessageBelowArrow true
title Get List Transaction Notifications - Interaction Diagram
participant "client" as c
participant "evm-brand" as eb
participant "evm-notification" as en
database "evm_notification" as evm_n
c -> eb : get list notification
activate eb
alt if client unauthorized
eb -> c : error unauthorized
end
eb -> en : get list notification
activate en
en -> evm_n : get list notification
activate evm_n
return list notification data
return list notification data
return list notification data
```