# 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.