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