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.
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>"
}
]
}
]
}
]
}
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
code | string | Evet | Tenant içinde benzersiz section kodu |
templateCode | string | Evet | Kullanılacak aktif template kodu |
status | string | Evet | Draft, Published, Archived |
isActive | bool | Hayır | Aktiflik durumu |
fields | ContentSectionFieldValueRequest[] | Hayır | Section seviyesindeki alan değerleri |
items | ContentSectionItemRequest[] | Hayır | Repeater item kayıtları |
ContentSectionFieldValueRequest
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
fieldCode | string | Evet | Template field kodu |
stringValue | string | Şarta bağlı | Text, textarea, richtext, icon, link alanları için |
numberValue | decimal? | Şarta bağlı | Number alanları için |
booleanValue | bool? | Şarta bağlı | Boolean alanları için |
mediaFileId | Guid? | Şarta bağlı | Image veya file alanları için |
translations | ContentSectionFieldValueTranslationRequest[] | Şarta bağlı | isLocalized = true alanlarda kullanılır |
ContentSectionFieldValueTranslationRequest
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
languageId | Guid | Evet | Dil ID |
stringValue | string | Evet | O dildeki değer |
ContentSectionItemRequest
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
sortOrder | int | Evet | Item sırası |
fields | ContentSectionFieldValueRequest[] | Hayır | Item alan değerleri |
Alan Tipi Kuralları
ImagealanlarındamediaFileIdgeçerli ve kategorisiimageolan bir medya kaydına ait olmalıdırFilealanlarındamediaFileIdgeçerli bir medya kaydı olmalıdırIconalanları string olarak tutulurisLocalized = truealanlardastringValueyerinetranslationsgö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:
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
page | int | 1 | Sayfa numarası |
pageSize | int | 10 | Sayfa başına kayıt |
status | string | — | Draft, Published, Archived |
templateCode | string | — | Template filtresi |
search | string | — | code 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
| Kod | Durum |
|---|---|
401 | Token eksik veya geçersiz |
403 | Tenant yetkisi yok veya modül erişimi yok |
404 | Section veya template bulunamadı |
409 | code çakışması |
400 | Template kuralı ihlali, field uyuşmazlığı veya medya referansı hatası |