---
# System prepended metadata

title: Templating Engine
tags: [completed]

---

# Templating Engine

###### tags: `completed`

Organizasyon ve iş ortakları tarafından ihtiyaç duyulan içeriğin veri ile üretilmesini sağlayan mikro servis kümesidir.
 
## Temel Hedefler

- Hizmetini RestAPI olarak sunması
- Bağımsız veritabanı ve loglama yapısına sahip olması
- Templating (Render) ham halde ve PDF çıktı olarak yapabilmesi
- Veri gizliliği sağlayarak iz kaydı oluşturabilmesi

## Teknoloji

- .Net Core Service Application
- Templating Engine : https://github.com/lunet-io/scriban
- Html/Text To PDF  : Kurumda lisansı bulunan Aspose .Net kütüphanesi
- Tanımlar ve talepler için veri tabanı olarak SQL Server 
- LOG kayıtları için ELK


## İçerik Tanımları
Kulanıcıya iletilen tüm metin içerikler içerik olarak kayıt altına alınır. İçerikler kullanılarak, text metinler, html mailler, pdf dosylar, html sayfalar gib çeşitli formatta içerikler oluşturulabilir.

**name** kaydın tekil adıdır. Sorgulamalar ve ilişkiler bu anahtar alan üzerinden yapılır.
**temlate** dönüşümü yapılacak içeriği taşır.
**master-temlate** dönüşüm için kullanılacak template kaydının içine yerleşeceği master content tanımıdır.

```json
{
  "name": "tr-manuel-payment-after-mail-content",
  "master-template": "master-mail-template",
  "template": "<p>Sevgili {{name.first}} hala otomatik ödeme vermemişsiniz :(</p>"
}
```

## Render  Talebi
Kayıtlı bir template için data sunularak render talebinde bulunulur.

```json
{
  "name": "tr-manuel-payment-after-mail-content",
  "render-data": {
    "name": {
      "first": "Ugur",
      "last": "Karatas"
    }
  },
  "render-data-for-log": {
    "name": {
      "first": "U*****",
      "last": "K******"
    }
  },
  "source-data": {
    "Application": "Pusula",
    "Method": "Scheduled_CheckAutoPayment",
    "CustomerCN": "38552069008"
  }
}
```
**render-data-for-log** log dosyasında kaydında sakınca olan verilerin saklanması için kullanılır. Render *render-data* ile yapılır, log ise *render-data-for-log* ile oluşturulur.

**source-data** methodun cağrılıken hangi uygulama, sistem, amaç gibi gelecekte raporlama ve sorgulamada kullanacak verileri sağlar.


## Tanım Servisleri

### GET : /template/definition/{page-index}/{page-size}
Servisi ile sorgulanan tüm template kayıtlarına erişilir.

#### Query Parameter
```
"name": "tr-manuel-payment%"
```
**name** parametresinde SQL Like benzeri parçalı arama yapılabilir.

### POST: /template/definition/
Servisi ile var olan bir kaydı güncelleyebilir veya yeni bir kayıt oluşturulabilir. Template Definition body olarak post edilir.

### DELETE: /template/definition/{name}
Servisi ile verilen isimdeki template silinir.

## Render Servisleri

### POST: /template/render
Servisi ile var olan bir template sadece render edilir. Render Request body olarak post edilir. Dönüş değeri olarak string döner.

### POST: /template/render/pdf
Servisi ile var olan bir template render edilir ve pdf dosyasına çevrilir. Render Request body olarak post edilir. Dönüş değeri dosya içeriğini içeren stream döner.

### POST: /template/render/query/{page-index}/{page-size}
Servisi ile render edilen tüm kayıtlara erişilir. Kayırlar ELK üzerinden sorgulanır. Her bir render talep kaydı ile ilgli bilgiler Guid formatında bir Id ile döner.
```JSON
{
  "template": "tr-manuel-payment-after-mail-content",
  "query": {
    "match": {
      "source-data.customerCN": "38552069008"
    }
  }
}
```
**query** ELK sorgu modeline uygun olarak hazırlanmış sorgu değeridir. source-data ve render-data üzerinden sorgulama yapılabilir.

### GET: /template/render/instance/{id}
Id değeri geçilen render edilmiş kayıt string olarak döner.

### GET: /template/render/instance/pdf/{id}
Id değeri geçilen render edilmiş kayıt stream olarak döner.
