Urun Ozellikleri (Attribute Definitions)
Dinamik urun ozelliklerinin tanimlari. Her musteri kendi ozellik setini olusturabilir. Ozellikler filtreleme ve siralama icin isaretlenebilir.
Base URL: /api/tenant/product-catalog/attributes
Yetkilendirme: Bearer Token + X-Api-Key
Modul: Product Catalog modulu musteriye atanmis olmalidir.
Headers:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
X-Api-Key: customer-api-key
Veri Tipleri (DataType)
| Deger | Aciklama | Ornek |
|---|---|---|
Text | Serbest metin | Marka adi, malzeme |
Number | Tam sayi | Stok adedi, kapasite |
Decimal | Ondalikli sayi | Agirlik (kg), fiyat |
Boolean | Evet/Hayir | Garantili mi, su gecirmez mi |
Date | Tarih | Uretim tarihi, son kullanma |
Select | Onceden tanimli secenekler | Renk, beden |
POST /
Yeni ozellik tanimi olusturur. Select tipinde ozellikler icin options dizisi ile birlikte secenekler tanimlanabilir.
Request Body:
{
"code": "renk",
"dataType": "Select",
"isRequired": false,
"isFilterable": true,
"isSortable": false,
"unit": null,
"attributeGroupId": "3fa85f64-...",
"translations": [
{
"languageId": "9cd14a82-...",
"label": "Renk",
"description": "Urunun rengi"
}
],
"options": [
{
"sortOrder": 1,
"translations": [
{ "languageId": "9cd14a82-...", "value": "Kirmizi" }
]
},
{
"sortOrder": 2,
"translations": [
{ "languageId": "9cd14a82-...", "value": "Mavi" }
]
}
]
}
| Alan | Tip | Zorunlu | Aciklama |
|---|---|---|---|
code | string | Evet | Benzersiz ozellik kodu (ornek: renk, agirlik) |
dataType | string | Evet | Veri tipi: Text, Number, Decimal, Boolean, Date, Select |
isRequired | bool | Hayir | Zorunlu alan mi |
isFilterable | bool | Hayir | Filtreleme icin kullanilabilir mi |
isSortable | bool | Hayir | Siralama icin kullanilabilir mi |
unit | string | Hayir | Birim (ornek: kg, cm, ml) |
attributeGroupId | Guid? | Hayir | Ait oldugu ozellik grubu |
translations | AttributeDefinitionTranslationRequest[] | Evet | Dil cevirileri |
options | CreateAttributeOptionRequest[] | Hayir | Select tipinde secenekler |
AttributeDefinitionTranslationRequest
| Alan | Tip | Zorunlu | Aciklama |
|---|---|---|---|
languageId | Guid | Evet | Dil ID |
label | string | Evet | Goruntuleme etiketi |
description | string | Hayir | Aciklama |
CreateAttributeOptionRequest
| Alan | Tip | Zorunlu | Aciklama |
|---|---|---|---|
sortOrder | int | Hayir | Siralama |
translations | AttributeOptionTranslationRequest[] | Evet | Secenek cevirileri |
AttributeOptionTranslationRequest
| Alan | Tip | Zorunlu | Aciklama |
|---|---|---|---|
languageId | Guid | Evet | Dil ID |
value | string | Evet | Secenek degeri |
Response — 201 Created:
{
"success": true,
"data": {
"id": "3fa85f64-...",
"code": "renk",
"dataType": "Select",
"isRequired": false,
"isFilterable": true,
"isSortable": false,
"unit": null,
"attributeGroupId": "3fa85f64-...",
"createdAt": "2026-03-28T14:00:00Z",
"updatedAt": null,
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"label": "Renk",
"description": "Urunun rengi"
}
],
"options": [
{
"id": "opt-1-...",
"sortOrder": 1,
"translations": [
{ "languageId": "9cd14a82-...", "languageCode": "tr", "value": "Kirmizi" }
]
},
{
"id": "opt-2-...",
"sortOrder": 2,
"translations": [
{ "languageId": "9cd14a82-...", "languageCode": "tr", "value": "Mavi" }
]
}
]
}
}
GET /
Tum ozellik tanimlarini secenekleriyle birlikte listeler.
Response — 200 OK: AttributeDefinitionResponse[] dizisi doner.
GET /{id}
Belirli bir ozellik tanimini getirir.
Response — 200 OK: AttributeDefinitionResponse objesi doner.
PUT /{id}
Ozellik tanimini gunceller. code alani guncellenemez.
Request Body:
{
"dataType": "Select",
"isRequired": true,
"isFilterable": true,
"isSortable": false,
"unit": null,
"attributeGroupId": "3fa85f64-...",
"translations": [
{
"languageId": "9cd14a82-...",
"label": "Renk",
"description": "Urunun ana rengi"
}
]
}
Response — 200 OK: AttributeDefinitionResponse objesi doner.
DELETE /{id}
Ozellik tanimini siler (soft delete).
Response — 204 No Content
Secenek Yonetimi (Options)
POST /{id}/options
Mevcut bir Select tipindeki ozellege yeni secenek ekler.
Request Body:
{
"sortOrder": 3,
"translations": [
{ "languageId": "9cd14a82-...", "value": "Yesil" }
]
}
Response — 201 Created: AttributeOptionResponse objesi doner.
PUT /{id}/options/{optionId}
Mevcut bir secenegi gunceller.
Request Body:
{
"sortOrder": 3,
"translations": [
{ "languageId": "9cd14a82-...", "value": "Koyu Yesil" }
]
}
Response — 200 OK: AttributeOptionResponse objesi doner.
DELETE /{id}/options/{optionId}
Secenegi siler (soft delete).
Response — 204 No Content
Olasi Hatalar
| Kod | Durum |
|---|---|
401 | Token eksik veya gecersiz |
403 | Tenant kullanicisi yetkisi yok veya product-catalog modul erisimi yok |
404 | Ozellik tanimi veya secenek bulunamadi |
409 | Ozellik kodu cakismasi |
400 | Gecersiz DataType veya Select olmayan ozellege secenek ekleme denemesi |