---
# System prepended metadata

title: Basics

---

# Basics

İş ve teknik altyapı ihtiyaçlarını karşılamak ve mümkün olan en küçük ve en verimli parçalar halinde geliştirme yaklaşımı hedeflenmiştir.  

## Domain
* *Domain* kavramı birden fazla süreç tarafından kullanılan her türlü veri, akış ve servis kümesi için kullanılır. 
* *Domain* direkt olarak gerçekten hayattan izdüşümle belirlenir. *Person Domain, Vahicle Domain, Document Domanin* gibi. 
* Domain işleyişini gerçekleştirme için başka bir domain ile birlikte çalışabilir.

## Kayıt
* Tüm kayıtlar bir akış ile oluşturulur. 
* Kaydın global bir tekil anahtarı olur. 
* Kaydın tekil anahtarı aynı zamanda kaydı oluşturan akış için *correlation key* olarak kullanılır.
* Kayıt ile ilişkili aktif bir akış bulunuyorsa aktif akışın bilgisi bulunur.
* Kayıt ile ilgili geçmiş tüm akışlar ayrıca sorgulanabilir.
* Kayıt silimez, sadece silindi olarak işaretlenir.
* Her kaydın üstünde referans olarak tuttuğu başka bir kayıt bilgisi olabilir.

### Örnek Kayıt Şeması

```json
{
  "id": "15802b18-cc2f-4b79-808f-e35b6023782c",
```
> **id** Kaydın tekil anahtarıdır.
```json
  "active-process": {
    "id": "15802b18-cc2f-4b79-808f-e35b6023782c",
    "name": "create-dealer-contact",
    "available-transitions": [
      {
        "name": "create-dealer-contact-approve",
        "title": "Onayla",
        "form": "process-generic-approve"
      }
    ]
  },
```
> **active-process** Kaydın üstünde bulunan aktif akış bilgisini içerir. Veriler akış izleme sistemi sorgulanarak elde edilir.
```json
  "reference": {
    "name": "PROCESS:retail-loan-vehicle",
    "id": "e39d7d85-22a3-4f35-a5ac-01fffc229635"
  },
  
```
> **reference** Kaydın üst akışı veya direkt ilişkli farklı bir kayıt bilgileri edilir. Eğer bir akış ise PROCESS ön eki ile, eğer referans bir başka direkt kayıt ise (örneğin "ENTITY:loan-account") ise ENTITY ön eki ile kayıt edilir. Varlığı zorunlu değildir.
```json
  
  "status": "N",
```
> **status** Kaydın silinmesi durumunda aktiflik durumu pasife (R) çekilir. Kayıt asla silinmez. Aktif durum için "A", yeni bir kayıt ise ve akışı devam ediyorsa "N" verilir.
```json
  "citizenship-number": 385559965653,
  "name": {
    "First": "Uğur",
    "Last": "Karataş"
  }
}
```
> Kayıt ile ilgili özel bilgiler.

### Örnek Kaydın İlişkisel Veritabanı Şeması

| Column Adı | Veri Tipi<sup>1</sup> | Ortak ? <sup>2</sup> | Açıklama |
| -------- | -------- | -------- |-------- |
| id     | uuid      | *  |
| active-process     | uuid     | * | Eğer aktif bir iş akışı var ise onun anahtarı. Bu anahtar kullanarak aktif akış ile ilgili bilgilerle şema zenginleştirilerek dönülür. |
| referance.name     | text     | * | Eğer column ismi içinde (.) kullanılmaşsa şema oluşturulurken **path** verisine uygun şekilde verilerin gruplanacağını belirtir. |
| referance.id     | text     | * | |
| status     | char     | * | (**N**)ew,(**A**)ctive,(**R**)emoved. Sorgularda sıklıkla kullanılacağı ve indeksin parçası olacağı için özellikle tek karakter tercih edilmiştir.  |
| citizenship-number     | bigint     |  | |
| name.first     | text     |  | |
| name.last     | text     |  | |

**1** Veri tipleri için YugabyteDB baz alınmıştır.
**2** Tüm tablolarda bulunacak ortak alan olduğunu belirtir.


## Akış
* Akışlar görsel olarak tasarlanır.
* Akış ile iletişim asenkron olarak sağlanır
* Akışlar mesajlar ile başlatılır veya ilerletilir.
* Akışlar geri bilgi vermek için *callback worker* kullanır.
* *Callback Worker* verilen bir servis noktasına veya SignalR ile verilen bir hub noktasına geri dönnüş sağlar.
* Birden fazla sistem *CallBack* ile bilgilendirilebilir. 

## Mesaj
* Her bir mesaj bir veri kümesi bekler. 
* Veri kümesi teknoloji agnostik olarak tanımlanır.
* Veri kümesi içerisinde veri modeli kullanıcı arabirim zenginleştirmelerini (enum değerler, referans değer listeleri vs.) içerir.
* Veri kümesi içerisinde veri doğrulama, referans gibi kontrol bilgileride yer alır.
* Kontrol bilgileri hem kullanıcı arabiriminde hem de akış tarafında kullanılır.



