Ana içeriğe geç

Urunler

Urunlerin CRUD islemleri, ozellik deger atama ve Media Manager referanslariyla kapak/galeri yonetimi.

Base URL: /api/tenant/product-catalog/products Yetkilendirme: Bearer Token + X-Api-Key Modul: Product Catalog modulu musteriye atanmis olmalidir.

Headers:

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

POST /

Yeni urun olusturur. Ceviriler, kategori atamalari ve ozellik degerleri tek istekte gonderilebilir.

Request Body:

{
"code": "iphone-16-pro",
"sku": "IP16PRO-256-BLK",
"coverImageMediaFileId": "media-cover-id-...",
"status": "Draft",
"isActive": true,
"categoryIds": ["3fa85f64-..."],
"translations": [
{
"languageId": "9cd14a82-...",
"name": "iPhone 16 Pro",
"slug": "iphone-16-pro",
"shortDescription": "Apple iPhone 16 Pro 256GB",
"description": "<p>Detayli urun aciklamasi...</p>",
"metaTitle": "iPhone 16 Pro | Magazamiz",
"metaDescription": "iPhone 16 Pro 256GB en uygun fiyatla"
}
],
"images": [
{
"mediaFileId": "media-gallery-1-id-...",
"sortOrder": 1,
"altText": "iPhone 16 Pro on gorunum"
}
],
"attributeValues": [
{
"attributeDefinitionId": "attr-renk-id-...",
"attributeOptionId": "opt-siyah-id-..."
},
{
"attributeDefinitionId": "attr-agirlik-id-...",
"decimalValue": 0.199
},
{
"attributeDefinitionId": "attr-garantili-id-...",
"booleanValue": true
}
]
}
AlanTipZorunluAciklama
codestringEvetBenzersiz urun kodu
skustringHayirBenzersiz stok birimi kodu
coverImageMediaFileIdGuid?HayirKapak gorseli icin Media Manager dosya ID
statusstringEvetDraft, Published veya Archived
isActiveboolHayirAktiflik durumu (varsayilan: true)
categoryIdsGuid[]HayirKategori ID listesi
translationsProductTranslationRequest[]EvetDil cevirileri
imagesProductImageRequest[]HayirGaleri gorselleri
attributeValuesProductAttributeValueRequest[]HayirOzellik degerleri

ProductTranslationRequest

AlanTipZorunluAciklama
languageIdGuidEvetDil ID
namestringEvetUrun adi
slugstringHayirURL slug (bos ise otomatik olusturulur)
shortDescriptionstringHayirKisa aciklama
descriptionstringHayirDetayli aciklama (HTML)
metaTitlestringHayirSEO basligi
metaDescriptionstringHayirSEO aciklamasi

ProductAttributeValueRequest

Ozelligin dataType degerine gore ilgili alan doldurulur:

AlanTipAciklama
attributeDefinitionIdGuidOzellik tanimi ID (zorunlu)
textValuestring?Text tipi deger
numberValueint?Number tipi deger
decimalValuedecimal?Decimal tipi deger
booleanValuebool?Boolean tipi deger
dateValueDateTime?Date tipi deger
attributeOptionIdGuid?Select tipi secenek ID

ProductImageRequest

AlanTipZorunluAciklama
mediaFileIdGuidEvetMedia Manager'da yuklenmis gorsel ID
sortOrderintHayirSiralama degeri
altTextstring?HayirAlternatif metin

Response — 201 Created:

{
"success": true,
"data": {
"id": "3fa85f64-...",
"code": "iphone-16-pro",
"sku": "IP16PRO-256-BLK",
"status": "Draft",
"isActive": true,
"coverImageUrl": null,
"createdAt": "2026-03-28T14:00:00Z",
"updatedAt": null,
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"name": "iPhone 16 Pro",
"slug": "iphone-16-pro",
"shortDescription": "Apple iPhone 16 Pro 256GB",
"description": "<p>Detayli urun aciklamasi...</p>",
"metaTitle": "iPhone 16 Pro | Magazamiz",
"metaDescription": "iPhone 16 Pro 256GB en uygun fiyatla"
}
]
}
}

GET /

Urunleri filtreli ve sayfalanmis olarak listeler. Ozellik degerlerine gore filtreleme destekler.

Query Parametreleri:

ParametreTipVarsayilanAciklama
pageint1Sayfa numarasi
pageSizeint10Sayfa basina kayit
statusstringDraft, Published veya Archived filtresi
categoryIdGuid (tekrarli)Kategori filtresi. Birden fazla categoryId gonderilebilir
searchstringUrun adinda arama
langstringDil kodu filtresi (ornek: tr)
attrs[code]string (tekrarli)Ozellik degerine gore filtreleme. Ayni code birden fazla kez gonderilebilir
attrs[code_min]stringSayisal ozellik alt sinir
attrs[code_max]stringSayisal ozellik ust sinir

Ozellik Filtreleme Ornekleri

# Rengi "Kirmizi" olan urunler
GET /api/tenant/product-catalog/products?attrs[renk]=Kirmizi

# Agirligi 0.5 ile 2.0 kg arasi urunler
GET /api/tenant/product-catalog/products?attrs[agirlik_min]=0.5&attrs[agirlik_max]=2.0

# Garantili urunler
GET /api/tenant/product-catalog/products?attrs[garantili]=true

# Coklu kategori filtresi (OR)
GET /api/tenant/product-catalog/products?categoryId=cat-a&categoryId=cat-b

# Ayni attribute icinde coklu secim (OR)
GET /api/tenant/product-catalog/products?attrs[brand]=Veda&attrs[brand]=Apicenna&attrs[brand]=GigiVet

# Birden fazla filtre birlikte
GET /api/tenant/product-catalog/products?categoryId=xxx&attrs[renk]=Mavi&attrs[agirlik_max]=1.5

Filtre Semantigi

  • Ayni attribute icindeki tekrarli secimler OR mantigiyla uygulanir.
  • categoryId parametresi tekrarli gonderilirse kategoriler OR mantigiyla uygulanir.
  • Farkli attribute gruplari birbiriyle AND mantigiyla birlestirilir.

Ornek:

GET /api/tenant/product-catalog/products?attrs[brand]=Veda&attrs[brand]=Apicenna&attrs[form]=Tablet&attrs[form]=Toz

Yukaridaki ifade:

(brand IN [Veda, Apicenna]) AND (form IN [Tablet, Toz])

Response — 200 OK:

{
"success": true,
"data": {
"items": [
{
"id": "3fa85f64-...",
"code": "iphone-16-pro",
"sku": "IP16PRO-256-BLK",
"status": "Published",
"isActive": true,
"coverImageUrl": "https://api.example.com/media/acme/cc4d4a1df9894a8da60f0a5e8cb8583d.webp",
"createdAt": "2026-03-28T14:00:00Z",
"name": "iPhone 16 Pro",
"slug": "iphone-16-pro"
}
],
"page": 1,
"pageSize": 10,
"totalCount": 1,
"totalPages": 1
}
}

GET /export/xlsx

Filtrelenmis urun listesini Excel (.xlsx) olarak indirir. Liste endpoint'i ile ayni filtre semantigini kullanir, ancak sayfalama uygulanmaz.

Query Parametreleri:

ParametreTipVarsayilanAciklama
statusstringDraft, Published veya Archived filtresi
categoryIdGuid (tekrarli)Kategori filtresi. Birden fazla categoryId gonderilebilir
searchstringUrun kodu, SKU veya ceviri alanlarinda arama
langstringListeleme ve baslik alanlari icin tercih edilen dil kodu
attrs[code]string (tekrarli)Ozellik degerine gore filtreleme. Ayni code birden fazla kez gonderilebilir
attrs[code_min]stringSayisal ozellik alt sinir
attrs[code_max]stringSayisal ozellik ust sinir

Davranis:

  • page ve pageSize dikkate alinmaz; tum eslesen urunler export edilir.
  • Mevcut liste filtreleriyle ayni categoryId, search, lang ve attrs[...] mantigi kullanilir.
  • Cikti .xlsx dosyasi olarak indirilir.

Response:

  • 200 OK
  • Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • Content-Disposition: attachment; filename=products-YYYYMMDD-HHmmss.xlsx

Kolon Mantigi:

  • Her satir bir urunu temsil eder.
  • Ilk kolonlar temel alanlardir: id, code, sku, status, isActive, coverImageUrl, createdAt, updatedAt.
  • Ardindan cok dilli alanlar duzlestirilir. Ornek kolonlar: Name_tr, Slug_tr, Name_en, Slug_en.
  • Kategoriler tek hucrede birlestirilir; birden fazla kategori | ayiraciyla yazilir.
  • Ozellik degerleri attribute koduna gore kolonlastirilir; Select degerleri secenek etiketiyle, birden fazla deger gerekiyorsa | ile ayrilarak yazilir.
  • Uzun metin alanlari ve HTML iceren ceviri alanlari Excel hucreleri icinde aynen korunur.

Ornek:

GET /api/tenant/product-catalog/products/export/xlsx?status=Published&categoryId=cat-a&lang=tr

Bu istek yayinlanmis urunleri, secili kategori kapsaminda, Excel formatinda indirir.

GET /{id}

Urun detayini kategoriler, ozellik degerleri ve gorselleriyle birlikte getirir.

Response — 200 OK:

{
"success": true,
"data": {
"id": "3fa85f64-...",
"code": "iphone-16-pro",
"sku": "IP16PRO-256-BLK",
"status": "Published",
"isActive": true,
"coverImageUrl": "https://api.example.com/media/acme/cc4d4a1df9894a8da60f0a5e8cb8583d.webp",
"createdAt": "2026-03-28T14:00:00Z",
"updatedAt": "2026-03-28T15:00:00Z",
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"name": "iPhone 16 Pro",
"slug": "iphone-16-pro",
"shortDescription": "Apple iPhone 16 Pro 256GB",
"description": "<p>Detayli urun aciklamasi...</p>",
"metaTitle": "iPhone 16 Pro | Magazamiz",
"metaDescription": "iPhone 16 Pro 256GB en uygun fiyatla"
}
],
"categories": [
{
"id": "cat-id-...",
"parentId": null,
"sortOrder": 1,
"isActive": true,
"translations": [
{ "languageId": "...", "languageCode": "tr", "name": "Telefonlar", "slug": "telefonlar" }
]
}
],
"attributeValues": [
{
"attributeDefinitionId": "attr-renk-...",
"attributeCode": "renk",
"dataType": "Select",
"unit": null,
"textValue": null,
"numberValue": null,
"decimalValue": null,
"booleanValue": null,
"dateValue": null,
"attributeOptionId": "opt-siyah-...",
"optionTranslations": [
{ "languageId": "...", "languageCode": "tr", "value": "Siyah" }
]
},
{
"attributeDefinitionId": "attr-agirlik-...",
"attributeCode": "agirlik",
"dataType": "Decimal",
"unit": "kg",
"decimalValue": 0.199,
"attributeOptionId": null,
"optionTranslations": null
}
],
"images": [
{
"id": "img-id-...",
"imageUrl": "https://api.example.com/media/acme/f9cc9bbcc17f4635b4b8766d939e6043.jpg",
"sortOrder": 1,
"altText": "iPhone 16 Pro on gorunum"
}
]
}
}

PUT /{id}

Urunu gunceller. Kategori atamalari ve ozellik degerleri tamamen yeniden yazilir (replace).

Request Body: CreateProductRequest ile ayni yapidir (code haric).

Response — 200 OK: ProductResponse objesi doner.


DELETE /{id}

Urunu siler (soft delete).

Response — 204 No Content


Medya Kullanımı

Kapak ve galeri gorselleri icin akıs:

  1. Dosyalari Media Manager modulu ile yukleyin.
  2. Kapak icin coverImageMediaFileId, galeri icin images[].mediaFileId alanlarini kullanin.
  3. Kapagi kaldirmak icin coverImageMediaFileId: null, galeriyi degistirmek icin images listesini yeniden gonderin.

Olasi Hatalar

KodDurum
401Token eksik veya gecersiz
403Tenant kullanicisi yetkisi yok veya product-catalog modul erisimi yok
404Urun, kategori, ozellik tanimi veya medya kaydi bulunamadi
409Urun kodu, SKU veya slug cakismasi
400Gecersiz status degeri veya medya referansi hatasi