Ana içeriğe geç

Carousel Manager

Müşteri sitesindeki carousel gruplarını ve slide item'larını yönetmek için kullanılan tenant modülüdür. Her carousel benzersiz bir code ile tanımlanır; her carousel altında sıralı item listesi bulunur. Item alanları çok dillidir ve görseller Media Manager üzerinden referanslanır.

Base URL: /api/tenant/carousel-manager/carousels Yetkilendirme: Bearer Token + X-Api-Key Modül: carousel-manager

Headers:

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

Veri Modeli

  • Carousel: code, name, isActive
  • CarouselItem: desktopImageMediaFileId, mobileImageMediaFileId, sortOrder, isActive, publishStartDate, publishEndDate, openInNewTab
  • CarouselItemTranslation: title, subtitle, ctaText, ctaLink, altText
bilgi

desktopImageMediaFileId ve mobileImageMediaFileId alanları doğrudan URL değil, Media Manager dosya ID'si bekler. Response içinde URL karşılıkları da döner.


POST /

Yeni carousel oluşturur.

Request Body:

{
"code": "home-hero",
"name": "Homepage Hero",
"isActive": true,
"items": [
{
"desktopImageMediaFileId": "11111111-1111-1111-1111-111111111111",
"mobileImageMediaFileId": "22222222-2222-2222-2222-222222222222",
"sortOrder": 1,
"isActive": true,
"publishStartDate": "2026-03-29T00:00:00Z",
"publishEndDate": "2026-04-30T23:59:59Z",
"openInNewTab": false,
"translations": [
{
"languageId": "9cd14a82-1111-1111-1111-111111111111",
"title": "Yeni Sezon Koleksiyonu",
"subtitle": "Kampanyayi kesfet",
"ctaText": "Incele",
"ctaLink": "/kampanyalar/yeni-sezon",
"altText": "Yeni sezon banner gorseli"
}
]
}
]
}
AlanTipZorunluAçıklama
codestringEvetTenant içinde benzersiz carousel kodu
namestringEvetPanelde görünecek yönetim adı
isActiveboolHayırCarousel aktiflik durumu
itemsCreateCarouselItemRequest[]Hayırİstenirse ilk item listesi

CreateCarouselItemRequest

AlanTipZorunluAçıklama
desktopImageMediaFileIdGuid?KoşulluDesktop görsel ID, mobile ile birlikte en az biri zorunlu
mobileImageMediaFileIdGuid?KoşulluMobile görsel ID, desktop ile birlikte en az biri zorunlu
sortOrderintEvetItem sıralaması, aynı carousel içinde benzersiz olmalı
isActiveboolHayırItem aktiflik durumu
publishStartDateDateTime?HayırYayın başlangıç tarihi
publishEndDateDateTime?HayırYayın bitiş tarihi
openInNewTabboolHayırCTA linki yeni sekmede açılsın mı
translationsCarouselItemTranslationRequest[]EvetDil çevirileri

CarouselItemTranslationRequest

AlanTipZorunluAçıklama
languageIdGuidEvetDil ID
titlestring?HayırBaşlık
subtitlestring?HayırAlt başlık
ctaTextstring?HayırCTA buton metni
ctaLinkstring?HayırRelative veya absolute hedef link
altTextstring?HayırGörsel alt metni

Response — 201 Created:

{
"success": true,
"data": {
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"code": "home-hero",
"name": "Homepage Hero",
"isActive": true,
"createdAt": "2026-03-29T09:50:00Z",
"updatedAt": null,
"items": [
{
"id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"desktopImageMediaFileId": "11111111-1111-1111-1111-111111111111",
"desktopImageUrl": "https://cdn.example.com/hero-desktop.webp",
"mobileImageMediaFileId": "22222222-2222-2222-2222-222222222222",
"mobileImageUrl": "https://cdn.example.com/hero-mobile.webp",
"sortOrder": 1,
"isActive": true,
"publishStartDate": "2026-03-29T00:00:00Z",
"publishEndDate": "2026-04-30T23:59:59Z",
"openInNewTab": false,
"translations": [
{
"languageId": "9cd14a82-1111-1111-1111-111111111111",
"languageCode": "tr",
"title": "Yeni Sezon Koleksiyonu",
"subtitle": "Kampanyayi kesfet",
"ctaText": "Incele",
"ctaLink": "/kampanyalar/yeni-sezon",
"altText": "Yeni sezon banner gorseli"
}
]
}
]
}
}

GET /

Carousel kayıtlarını filtreli ve sayfalı listeler.

Query Parametreleri:

ParametreTipVarsayılanAçıklama
pageint1Sayfa numarası
pageSizeint10Sayfa başına kayıt
searchstringcode, name, item title veya subtitle alanlarında arama
isActiveboolCarousel aktiflik filtresi

Response — 200 OK:

{
"success": true,
"data": {
"items": [
{
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"code": "home-hero",
"name": "Homepage Hero",
"isActive": true,
"createdAt": "2026-03-29T09:50:00Z",
"itemCount": 2,
"activeItemCount": 2
}
],
"page": 1,
"pageSize": 10,
"totalCount": 1,
"totalPages": 1
}
}

GET /{id}

Carousel detayını tüm item ve çevirileriyle getirir.

Response — 200 OK: POST / ile aynı data yapısını döner.


GET /by-code/{code}

Carousel detayını benzersiz code ile getirir.

Örnek: GET /api/tenant/carousel-manager/carousels/by-code/home-hero


PUT /{id}

Carousel metadata kaydını günceller. Bu endpoint artık item listesini değiştirmez.

Request Body:

{
"code": "home-hero",
"name": "Homepage Hero",
"isActive": true
}
AlanTipZorunluAçıklama
codestringEvetBenzersiz carousel kodu
namestringEvetYönetim adı
isActiveboolHayırCarousel aktiflik durumu
ipucu

Sadece 1 item eklemek veya güncellemek için artık carousel'in tüm item listesini tekrar göndermeniz gerekmez. Bunun yerine aşağıdaki item endpoint'leri kullanılır.


POST /{carouselId}/items

Belirli bir carousel'e tek bir item ekler.

Request Body: CreateCarouselItemRequest

Örnek:

{
"desktopImageMediaFileId": "11111111-1111-1111-1111-111111111111",
"mobileImageMediaFileId": "22222222-2222-2222-2222-222222222222",
"sortOrder": 3,
"isActive": true,
"publishStartDate": "2026-03-29T00:00:00Z",
"publishEndDate": "2026-04-30T23:59:59Z",
"openInNewTab": false,
"translations": [
{
"languageId": "9cd14a82-1111-1111-1111-111111111111",
"title": "Yeni kampanya",
"subtitle": "Tek item ekleme ornegi",
"ctaText": "Detay",
"ctaLink": "/kampanya/yeni",
"altText": "Kampanya gorseli"
}
]
}

Response — 201 Created: tek bir CarouselItemResponse döner.


GET /{carouselId}/items/{itemId}

Belirli bir carousel item kaydını getirir.

Response — 200 OK: tek bir CarouselItemResponse döner.


PUT /{carouselId}/items/{itemId}

Belirli bir item kaydını günceller. Bu endpoint ilgili item için full replace mantığıyla çalışır; gönderilmeyen translation kayıtları soft delete ile kaldırılır.

Request Body: CreateCarouselItemRequest ile aynı alanları kullanır.


DELETE /{carouselId}/items/{itemId}

Belirli bir item kaydını ve alt translation kayıtlarını soft delete ile siler.

Response — 204 No Content


DELETE /{id}

Carousel kaydını ve altındaki item/translation kayıtlarını soft delete ile siler.

Response — 204 No Content


Validasyon Kuralları

  • code benzersiz olmalıdır.
  • Her item için en az bir görsel (desktopImageMediaFileId veya mobileImageMediaFileId) verilmelidir.
  • Her item için varsayılan dil çevirisi zorunludur.
  • Aynı carousel içinde sortOrder değerleri çakışamaz.
  • publishStartDate, publishEndDate değerinden büyük olamaz.
  • ctaLink relative (/kampanya), anchor (#section), mailto:, tel: veya absolute URL olabilir.

Olası Hatalar

KodDurum
401Token eksik veya geçersiz
403Tenant kullanıcısı yetkisi yok veya carousel-manager modül erişimi yok
404Carousel kaydı bulunamadı
409code çakışması
400Geçersiz body, language, link veya medya referansı