# Amorphie Genel Mimari
## Hiyerarsik Terminoloji
```plantuml
@startmindmap
* Domain
** Views
** Extensions
** Workflow
*** States
**** Views
****[#lightblue] Start State
****[#lightblue] Human Task State
****[#lightblue] Normal State
****[#lightblue] Wizard State
****[#lightblue] Sub Flow State
****[#lightblue] Finish State
**** Transitions
***** Views
***** Tasks...
*****[#lightblue] Forward Transitions
*****[#lightblue] Queqeu Transition
*****[#lightblue] Back Transitions
*** SharedTransitions
**** Views
*** Features
**** Views
*** Views
*** Funtions
**** Task
*****[#lightblue] Http Task
*****[#lightblue] Zeebe Task
*****[#lightblue] Orkes Task
*****[#lightblue] Transition Trigger Task
*** Extensions
***[#orange] Instances
**** Functions
** Functions
@endmindmap
```
## Clusters & Enviroments
Cluster : Birden fazla enviroment barindirabilen, butunsel olarak hizmet verebilen ortamlar butunu.
Enviroment : Bir cluster icersinde bulunan ortamlar butunu.
### Prod Enviroments
```plantuml
@startuml
top to bottom direction
node Production {
component prac as "amoprhie-core"
component prbbta as "bbt-accounts"
component prbbtc as "bbt-cards"
component prbbtl as "bbt-loans"
component prbbtt as "bbt-transfers"
}
node Pilot {
component piac as "amoprhie-core"
component pibbta as "bbt-accounts"
component pibbtc as "bbt-cards"
component pibbtl as "bbt-loans"
component pibbtt as "bbt-transfers"
}
node ProdShared {
component psai as "amorphie-idm"
component psac as "amorphie-config"
}
Production --> ProdShared
Pilot --> ProdShared
@enduml
```
### Development Enviroments
```plantuml
@startuml
node UAT {
component uac as "amoprhie-core"
component ubbta as "bbt"
}
node Test {
component tac as "amoprhie-core"
component tbbta as "bbt"
}
node Development {
component dvac as "amoprhie-core"
component dvbbta as "bbt"
}
node TestShared {
component psai as "amorphie-idm"
component psac as "amorphie-config"
}
UAT --> TestShared
Test --> TestShared
Development --> TestShared
@enduml
```
## Runtimes on Clusters & Enviroments
### Core flows per runtime
* Domains
* Functions
* Views
* Flows
* Features
* Schemas
* Extensions (Worflow Depend?)
### Core flows per cluster (singleton)
#### Configuration Flows
* Enviroments
* Components
* Extensions (Always?) veya Always-On-Extensions
* Runtime-Registration
### IDM Flows
* Users *(Kullanici profil, guvenlik sorusu, guvenlik resmi ve sifre bilgileri bu akista bulunur)*
* Clients
* Scopes
* Consents
* Tokens
* Policies
* Login (Mobile ve Backoffice ayrilacaksa ayri flow)
* IB-Login
* Backoffice-Login
* Password-Change
* Password-Reset
* Enrollment *(Sertifika ve device bilgileri bu akista kayit altina alinir)* :warning: Enroll edilmis cihaza, farkli bir kullanici giris yaparsa? Reenrollment?
### Messaging Flows (Just Transactional)
* Push-Operators
* SMS-OTP-Operators (Url, blacklist suresi gibi tanimlari icerir.)
* SMS-OTP-Blacklist
* SMS-OTP-User-Operator
* SMS-Push-Operators
* SMS-Bulk-Operators
* Email-Opearators
* IVN-Opearators
* Mail-Opearators
* SMS-OTP
* SMS-FAST
* SMS-Bulk
* Mail
* Push
* IVN
### Notification Flows
* Topics
* Subscriptions
* Notifications *(Her bir gonderim kaydi)*
### UI Flows
* Lists *(Back officede workflow ile iliskili grid configurasyonlarinin bulundugu repo)*
* Navigation *(Onyuzlerde kullanilacak navigation featurelar icin tanim reposu)*
* Service *(Istemciler icin erisecekleri servilserin listesi. **BUT Navigasyonun bir parcasi olarak degerlendir!!!!**)*
## Runtimes Variables (Config File or Enviroment Variable)
* Enviroment Name
* Link To Configuration Runtime
* Link To IDM Runtime
Tum runtimelar Configuration Runtime tarafina dogru surekli bilgi akisi(hangi domainler, workflowlari sunuyor gibi) saglar.
Vice Versa; Configuration Runtime diger runtimelara query atabilir, command gonderebilir.
:::warning
**Telemetry Toparlama**
Runtime metricleri nasil consolide edilecek? Dapr style dusunulebilir. Her runtime metrics endpointten surekli veri akitir, ilgili urunler subscribe olabilir. Configuration runtime da otomatik register edebilir.
:::
## Gelistirme ve Configuratisyon
Developer localinde herhangi bir guid veya component configurasyonu olmadan gelistirme yapip dagitim yapabilir. Localinde tek runtime da tum flowlari ayaga kaldirabilir.
Ops takimi her bir runtime icin gereken gereken configurasyon tanimlarini yapar.
Musteriler tarafindan iletilen yasadiklari problemleri iceren sorunlari adreslemek ve daha hiz cozume kavusturmak icin gelsitirdigimiz bir arge calismasidir.
Neden
* Sorunun anlasilma surecinde efor kaybi oluisuyor
* Sorunu cozecek ekibin adreslenmesinde hata orani yuksek.
* Sorun kaydinin ekipler arasinda dolasmasi cozumu geciktiriyor.
Nasil
* YZ icin sorunu nasil anlayacagi ile kurallar ve kavramin oldugu bir hazirlik yapildi.
* Sorun YZ motoruna ilettiginde bu bilgileri kullanarak kullanicinin hareketleriniz ve iz kayitlari ile detayli bilgiye eriserek bilgileri topluyor.
* Topladigi veriler arasinda iliskileri kurarak sorunun kaynagini adresliyor.
Hedefler;
* Bilgi guvenligi acisindan kendi sistemlerimizdeki modellerde calismasi
* Sorun kaydi acildiginda otomatik sorun tespiti
* Sorun kaydinin yuksek dogrulukla sorumlu ekibe atanmasi