Ana içeriğe geç

Content Section Template Yönetimi

ContentSections modülünde kullanılacak sistem-geneli template tanımlarının yönetimi.

Bu endpoint'ler ile:

  • yeni template oluşturulabilir
  • mevcut template'ler listelenebilir
  • code veya id ile detay okunabilir
  • template alanları güncellenebilir
bilgi

Template kayıtları sistem geneli çalışır. Tenant kullanıcılar template oluşturamaz; sadece aktif template'leri okuyup bunları kullanarak content section oluşturabilir.

Base URL: /api/admin/content-sections/templates Yetkilendirme: Bearer Token (Admin)

Headers:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Veri Modeli

Bir template iki katmandan oluşur:

  • Section Fields: Section seviyesindeki tekil alanlar
  • Item Fields: Tekrarlayan item alanları

Desteklenen fieldType Değerleri

  • Text
  • Textarea
  • RichText
  • Image
  • File
  • Icon
  • Link
  • Number
  • Boolean

Desteklenen target Değerleri

  • Section
  • Item

Önemli Kurallar

  • code benzersizdir
  • Item alanı varsa itemListCode zorunludur
  • Item alanı yoksa itemListCode gönderilmemelidir
  • Aynı template içinde aynı target altında aynı code tekrar edemez
  • isLocalized = true sadece Text, Textarea, RichText, Icon, Link alan tiplerinde kullanılabilir
  • Update sırasında mevcut field'ın code ve target değeri değiştirilemez

POST /

Yeni template oluşturur.

Request Body:

{
"name": "FAQ List",
"code": "faq-list",
"description": "Sıkça sorulan sorular section template'i",
"itemListCode": "questions",
"isActive": true,
"fields": [
{
"code": "title",
"label": "Başlık",
"description": "Section ana başlığı",
"fieldType": "Text",
"target": "Section",
"isRequired": true,
"isLocalized": true,
"sortOrder": 1
},
{
"code": "subtitle",
"label": "Alt Başlık",
"description": "Section açıklama metni",
"fieldType": "Textarea",
"target": "Section",
"isRequired": false,
"isLocalized": true,
"sortOrder": 2
},
{
"code": "question",
"label": "Soru",
"description": "FAQ soru metni",
"fieldType": "Text",
"target": "Item",
"isRequired": true,
"isLocalized": true,
"sortOrder": 1
},
{
"code": "answer",
"label": "Cevap",
"description": "FAQ cevap metni",
"fieldType": "RichText",
"target": "Item",
"isRequired": true,
"isLocalized": true,
"sortOrder": 2
}
]
}
AlanTipZorunluAçıklama
namestringEvetTemplate adı
codestringEvetBenzersiz template kodu
descriptionstringHayırTemplate açıklaması
itemListCodestringŞarta bağlıItem alanları varsa zorunlu
isActiveboolHayırTemplate aktifliği
fieldsContentSectionTemplateFieldRequest[]EvetAlan tanımları

ContentSectionTemplateFieldRequest

AlanTipZorunluAçıklama
idGuid?HayırUpdate sırasında mevcut field ID
codestringEvetAlan kodu
labelstringEvetGörünen alan etiketi
descriptionstringHayırAlan açıklaması
fieldTypestringEvetAlan tipi
targetstringEvetSection veya Item
isRequiredboolHayırZorunlu alan mı
isLocalizedboolHayırÇok dilli içerik alacak mı
sortOrderintEvetSıralama

Response — 201 Created:

{
"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 /

Tüm template'leri listeler.

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": []
}
]
}

GET /{id}

Template detayını id ile getirir.

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


GET /by-code/{code}

Template detayını benzersiz code değeriyle getirir.

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

Response — 200 OK: GET /{id} ile aynı yapıdadır.


PUT /{id}

Template'i günceller.

Request Body:

{
"name": "FAQ List",
"description": "Güncellenmiş açıklama",
"itemListCode": "questions",
"isActive": true,
"fields": [
{
"id": "b20b7bb8-...",
"code": "title",
"label": "Başlık",
"description": "Section ana başlığı",
"fieldType": "Text",
"target": "Section",
"isRequired": true,
"isLocalized": true,
"sortOrder": 1
},
{
"code": "eyebrow",
"label": "Üst Başlık",
"description": "Opsiyonel kısa vurgu metni",
"fieldType": "Text",
"target": "Section",
"isRequired": false,
"isLocalized": true,
"sortOrder": 0
}
]
}

Update Notları

  • Mevcut field'lerde code değiştirilemez
  • Mevcut field'lerde target değiştirilemez
  • Yeni field eklemek için id gönderilmez
  • Mevcut implementation, request'e gönderilmeyen field'ları otomatik silmez

Response — 200 OK: ContentSectionTemplateResponse döner.


Olası Hatalar

KodDurum
401Token eksik veya geçersiz
403Admin yetkisi yok
404Template bulunamadı
409Template code çakışması
400Geçersiz field tipi, target veya template kuralı