Ana içeriğe geç

Content Sections

Tenant kullanıcıların sistemde tanımlı aktif template'leri okuyup bu template'lerden section içerikleri oluşturduğu modül.

ipucu

Template'lerin ne işe yaradığını müşteri diliyle görmek için Content Section Template Rehberi sayfasına bakın.

Bu sayfa iki endpoint grubunu kapsar:

  • Template okuma endpoint'leri
  • Content section CRUD endpoint'leri

Base URL: /api/tenant/content-sections Yetkilendirme: Bearer Token + X-Api-Key Modül: content-sections modülü müşteriye atanmış olmalıdır.

Headers:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
X-Api-Key: customer-api-key

Template Endpoint'leri

Tenant tarafı template oluşturmaz veya güncellemez. Sadece aktif template'leri okur.

GET /templates

Aktif template'leri listeler.

Tam URL: /api/tenant/content-sections/templates

Response — 200 OK:

{
"success": true,
"data": [
{
"id": "a38a8f57-...",
"name": "FAQ List",
"code": "faq-list",
"description": "Sıkça sorulan sorular section template'i",
"itemListCode": "questions",
"isActive": true,
"createdAt": "2026-03-29T10:00:00Z",
"updatedAt": null,
"fields": [
{
"id": "b20b7bb8-...",
"code": "title",
"label": "Başlık",
"description": "Section ana başlığı",
"fieldType": "Text",
"target": "Section",
"isRequired": true,
"isLocalized": true,
"sortOrder": 1
}
]
}
]
}

GET /templates/by-code/{code}

Aktif template detayını code ile getirir.

Tam URL: /api/tenant/content-sections/templates/by-code/{code}

Örnek: GET /api/tenant/content-sections/templates/by-code/faq-list


POST /

Yeni content section oluşturur.

Request Body:

{
"code": "home-faq",
"templateCode": "faq-list",
"status": "Draft",
"isActive": true,
"fields": [
{
"fieldCode": "title",
"translations": [
{
"languageId": "9cd14a82-...",
"stringValue": "Sıkça Sorulan Sorular"
}
]
},
{
"fieldCode": "subtitle",
"translations": [
{
"languageId": "9cd14a82-...",
"stringValue": "Merak edilen başlıklar"
}
]
}
],
"items": [
{
"sortOrder": 1,
"fields": [
{
"fieldCode": "question",
"translations": [
{
"languageId": "9cd14a82-...",
"stringValue": "Kurulum süresi ne kadar?"
}
]
},
{
"fieldCode": "answer",
"translations": [
{
"languageId": "9cd14a82-...",
"stringValue": "<p>Genelde 1-2 iş günü içinde tamamlanır.</p>"
}
]
}
]
}
]
}
AlanTipZorunluAçıklama
codestringEvetTenant içinde benzersiz section kodu
templateCodestringEvetKullanılacak aktif template kodu
statusstringEvetDraft, Published, Archived
isActiveboolHayırAktiflik durumu
fieldsContentSectionFieldValueRequest[]HayırSection seviyesindeki alan değerleri
itemsContentSectionItemRequest[]HayırRepeater item kayıtları

ContentSectionFieldValueRequest

AlanTipZorunluAçıklama
fieldCodestringEvetTemplate field kodu
stringValuestringŞarta bağlıText, textarea, richtext, icon, link alanları için
numberValuedecimal?Şarta bağlıNumber alanları için
booleanValuebool?Şarta bağlıBoolean alanları için
mediaFileIdGuid?Şarta bağlıImage veya file alanları için
translationsContentSectionFieldValueTranslationRequest[]Şarta bağlıisLocalized = true alanlarda kullanılır

ContentSectionFieldValueTranslationRequest

AlanTipZorunluAçıklama
languageIdGuidEvetDil ID
stringValuestringEvetO dildeki değer

ContentSectionItemRequest

AlanTipZorunluAçıklama
sortOrderintEvetItem sırası
fieldsContentSectionFieldValueRequest[]HayırItem alan değerleri

Alan Tipi Kuralları

  • Image alanlarında mediaFileId geçerli ve kategorisi image olan bir medya kaydına ait olmalıdır
  • File alanlarında mediaFileId geçerli bir medya kaydı olmalıdır
  • Icon alanları string olarak tutulur
  • isLocalized = true alanlarda stringValue yerine translations gönderilmelidir
  • Localized zorunlu alanlarda varsayılan dil çevirisi zorunludur
  • Template'te tanımlı olmayan field code gönderilemez

Response — 201 Created:

{
"success": true,
"data": {
"id": "4ca0b36d-...",
"code": "home-faq",
"templateCode": "faq-list",
"templateName": "FAQ List",
"itemListCode": "questions",
"status": "Draft",
"isActive": true,
"createdAt": "2026-03-29T10:30:00Z",
"updatedAt": null,
"fields": [
{
"fieldCode": "title",
"fieldType": "Text",
"stringValue": null,
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null,
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"stringValue": "Sıkça Sorulan Sorular"
}
]
}
],
"items": [
{
"id": "34d1f916-...",
"sortOrder": 1,
"fields": [
{
"fieldCode": "question",
"fieldType": "Text",
"stringValue": null,
"numberValue": null,
"booleanValue": null,
"mediaFileId": null,
"mediaUrl": null,
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"stringValue": "Kurulum süresi ne kadar?"
}
]
}
]
}
]
}
}

GET /

Content section kayıtlarını filtreli ve sayfalanmış listeler.

Query Parametreleri:

ParametreTipVarsayılanAçıklama
pageint1Sayfa numarası
pageSizeint10Sayfa başına kayıt
statusstringDraft, Published, Archived
templateCodestringTemplate filtresi
searchstringcode alanında arama

Response — 200 OK:

{
"success": true,
"data": {
"items": [
{
"id": "4ca0b36d-...",
"code": "home-faq",
"templateCode": "faq-list",
"templateName": "FAQ List",
"status": "Published",
"isActive": true,
"createdAt": "2026-03-29T10:30:00Z",
"updatedAt": "2026-03-29T11:15:00Z"
}
],
"page": 1,
"pageSize": 10,
"totalCount": 1,
"totalPages": 1
}
}

GET /{id}

Content section detayını tüm field ve item değerleriyle getirir.

Response — 200 OK: POST / ile dönen ContentSectionDetailResponse yapısı döner.


GET /by-code/{code}

Content section detayını section code değeriyle getirir.

Örnek: GET /api/tenant/content-sections/by-code/home-faq


PUT /{id}

Content section kaydını günceller.

Request Body: CreateContentSectionRequest ile aynı yapıdadır.

Update Notu

Mevcut implementation update sırasında mevcut field ve item değerlerini soft delete edip gelen payload'a göre yeni değer seti oluşturur. Bu nedenle update işlemlerinde section'ın tam son durumunu göndermek daha güvenlidir.

Response — 200 OK: ContentSectionDetailResponse döner.


DELETE /{id}

Content section kaydını siler (soft delete).

Response — 204 No Content


Olası Hatalar

KodDurum
401Token eksik veya geçersiz
403Tenant yetkisi yok veya modül erişimi yok
404Section veya template bulunamadı
409code çakışması
400Template kuralı ihlali, field uyuşmazlığı veya medya referansı hatası