# TAG Execute API Kullanım Dökümanı ## Proje Amacı TAG projesi, farklı kaynaklardan gelen verilerin özetlenmesini ve bu verilerin client taleplerine uygun formatlara dönüştürülmesini sağlar. Bu süreç, belirli domain, entity ve tag yapıları etrafında inşa edilmiştir. Uygulama, uzman servislerden alınan verileri işleyerek, belirli şemalar ve yollar üzerinden bu verileri formatlar ve geri döner. ## Uygulama Mimarisi 1. **Domain Objesi**: Projede, veri alanını temsil eden bir domain objesi tanımlanır. 2. **Entity Objesi**: Her domain için belirli varlıkları (entity) temsil eden entity objeleri tanımlanır. 3. **EntityData Objesi**: Bu obje, verinin şemasını oluşturur. İçerdiği field değerleri ile veri yapısını belirler. 4. **EntityDataSource Objesi**: Bu obje, EntityData’nın her field’ına karşılık gelen uzman servislerdeki verinin JSON path’ini barındırır. 5. **Tag Objesi**: Uzman servislerin URL’lerini formatlayabilen ve farklı kaynaklardan gelen verileri işleyebilen bir yapıdır. Bu objeler, başlık, query veya body’den gelen verilere göre URL’leri dinamik olarak bind eder. ### Örnek Tanımlama **Müşteri Yönetimi Domain'i (customer domain):** **Entities:** **Customer**: Müşterinin temel bilgileri (isim, adres, iletişim bilgileri vb.) **Account**: Müşterinin banka hesapları (hesap numarası, hesap türü, bakiye vb.) **Transaction**: Hesap hareketleri (işlem tarihi, işlem türü, tutar vb.) **Kredi Yönetimi Domain'i (loan domain):** **Entities:** **Loan**: Kredinin temel bilgileri (kredi türü, tutar, faiz oranı vb.) **Repayment**: Kredi geri ödeme planı (ödeme tarihi, tutar, kalan bakiye vb.) **Collateral**: Teminat bilgileri (teminat türü, değeri vb.) ## Source Bazlı Kullanım **Header** "header." prefixi ile headerda iletilen değerler kullanılabilir. ***Ayrıca uzman servise header'ların tümü iletilir.*** **Query String** "query." prefixi ile query string'de ki değerler kullanılabilir. **Body** "body." prefixi ile body'de iletilen değerler kullanılabilir. Json path yöntemi ile path girişi sağlanabilir. **Ayrıca uzman servise body'in tümü iletilir.** **Örnek** **URL Formatlama Örneği:** https://api.customer.com/api/customer/{header.X_Customer_Id}/{query.role}/{body.account.id} > Uzman servislere sadece GET ve POST yöntemi kullanılabilir. ## Endpointler ve Kullanım Aşağıda belirtilen endpointler, hem GET hem de POST isteklerini kabul eder. Bu endpointler, belirli domain ve entity yapılarına göre verilerin işlenmesini ve formatlanmasını sağlar. 1. **GET/POST /tag/{domainName}/{entityName}/{tagName}/execute** Belirli bir domain ve entity için tanımlanmış olan tag’e göre veriyi işler ve döner. **Örnek İstek:** ``` GET /tag/customer/order-status/active/execute POST /tag/customer/order-status/active/execute ``` **Responce Content Type:** application/json 2. **GET/POST /tag/{tagName}/execute** Genel bir tag için tanımlanmış olan veriyi işler ve döner. **Örnek İstek:** ``` GET /tag/active-customers/execute POST /tag/active-customers/execute ``` **Responce Content Type:** application/json 3. **GET/POST /template/html/{domainName}/{entityName}/{tagName}/{viewTemplateName}/execute** Belirli bir template ve tag için HTML formatında veriyi işler ve döner. **Örnek İstek:** ``` GET /template/html/customer/order/active-orders/execute POST /template/html/customer/order/active-orders/execute ``` **Responce Content Type:** text/plain 4. **GET/POST /template/pdf/{domainName}/{entityName}/{tagName}/{viewTemplateName}/execute** Belirli bir template ve tag için PDF formatında veriyi işler ve döner. **Örnek İstek:** ``` GET /template/pdf/customer/invoice/due-invoices/execute POST /template/pdf/customer/invoice/due-invoices/execute ``` **Responce Content Type:** text/plain ## Hata Yönetimi ve Kodları ### Hata Response Yapısı ```json { "title": "", "detail": "", "instance": "/template/pdf/customer/invoice/due-invoices/execute" } ``` ### Hata Kodları | İstisna | Hata Kodu | Açıklama | | -------- | -------- | -------- | | EntityNotFound | 404 | Talep edilen domain/obje bulumadığından dönen hata kodudur. | | ServiceCall | 400 | Uzman servislere yapılan çağrılarda oluşan hata durumunda dönen hata kodudur. Uzman servisten dönen status kodu ve mesajı hata mesajında yer alır. | | Format | 400 | Tag domainde tanımlanan url'in girdi parametreleri ile formatlamasında oluşan hata kodudur. Formatlada oluşan detay mesajları hata mesajında yer alır. | | InternalServerError | 500 | Uygulamanın iş katmanında oluşan hatalarda oluşan hata kodudur. |