Katalog ve stok kartı
Ürünün tanımı burada, sipariş kalemi Mongo’dadır. Depodaki miktar ve satış fiyatı da bu gruptadır; giriş-çıkış hareketi Mongo’dadır.
Vat ve Unit
KDV: name, rate (Float). Birim: name, isteğe bağlı shortName, symbol, multipler (Float, varsayılan 1 — şemadaki yazım).
Category
Ağaç. parentId isteğe bağlı. name, description, image, priority (0), isActive (true), deletedAt soft delete.
Product
code benzersizdir. Üst ürün (parentId) varyant ağacı içindir.
| Alan | Tip | Anlamı |
|---|---|---|
| code | String, unique | Ürün kodu |
| name | String | Ad |
| descriptive | String? | Kısa tanım |
| description | String? (Text) | Uzun açıklama |
| priority | Int, 0 | Vitrin sırası |
| vatId, unitId | Int | KDV ve birim |
| isActive | Boolean, true | Satışta mı |
| isHks | Boolean, true | HKS’ye tabi mi |
| warnings | String? (Text) | Uyarı metni |
Çocuk tablolar: görseller, kategoriler, favoriler, depo ürünleri, seçenekler, sepet, şirket tipi görünürlüğü, benzer adlar, HKS kodları, saklama koşulları, dış fiyat eşlemesi, ticker.
ProductImage
url, priority (0).
ProductOption
Ürünün satılabilir varyantı (kalite / paket farkı). Üst ürün varyant ağacı (parentId) ile karışmaz.
| Alan | Tip | Anlamı |
|---|---|---|
| productId | Int | Ürün |
| name | String? | Görünen ad; boşsa çalışma anında taban ürün adı |
| qualityType | ProductQualityType? | A, B, C |
| imageUrl | String? | Seçenek görseli |
| isActive | Boolean, true | Pasif seçenek gizlenir / fiyatlanmaz |
ProductOptionDetail
Seçeneğin artı, eksi veya nötr maddesi.
| Alan | Tip | Anlamı |
|---|---|---|
| optionId | Int | Seçenek |
| type | ProductDetailType | PRO, CON veya NEUTRAL |
| text | String | Metin |
ProductCategory
(productId, categoryId) bileşik anahtar.
ProductSimilarName
Arama eş anlamlısı. name, priority (0), isActive.
ProductHks
| Alan | Tip | Anlamı |
|---|---|---|
| productCode | String? | HKS ürün kodu |
| code | String | HKS kod |
| name | String | HKS adı |
ProductStorageCondition
key = StorageConditionType (sıcaklık, nem, ışık, havalandırma, ambalaj, raf ömrü, diğer). value metin, priority 0.
ProductCompanyType
Hangi şirket tipinin ürünü göreceği. (companyTypeId, productId) tektir. priority isteğe bağlı.
CompanyType
name, isteğe bağlı hksCode. Alıcılar ve ürün görünürlüğü bağlanır.
WarehouseProduct
Depodaki ürün kartı. (warehouseId, productId) tektir.
| Alan | Tip | Anlamı |
|---|---|---|
| stock | Float, 0 | Güncel miktar |
| criticalStock | Float, 0 | Kritik eşik |
| minQuantity | Float, 1 | Asgari sipariş miktarı |
| isActive | Boolean, true | Listeleniyor mu |
optionPrices ilişkisi depo–seçenek ek fiyatlarını taşır.
WarehouseProductPrice
Kademeli fiyat. price, margin (varsayılan 30), currency (TRY), minQuantity, avarageCost (0, ortalama maliyet), discountPercentage (0), priceWithoutDiscount (0).
Aramada “indirimli” tespiti priceWithoutDiscount > price ile yapılır; yüzde alanı tek başına sinyal değildir.
WarehouseProductOptionPrice
(warehouseProductId, optionId) tektir. additionalPrice (Float, 0) kg başına taban (indirimli) birim fiyata eklenen tutardır. Satır yoksa o seçenek o depoda satılmaz; taban fiyata düşmez.
StockBalance
WarehouseProduct ile 1:1. amount (Float, 0) ayrı bakiye miktarıdır; stock alanından farklı bir sayaç olarak durur.
PriceSource
Dış fiyat kaynağı. key benzersiz (mum belgesindeki source alanı). adapter çekici adı. config JSON. isActive.
ExternalProductMapping
(sourceId, externalName) tektir. unit isteğe bağlı. productId boşsa henüz eşlenmemiştir.
ProductTickerStats
Ürünle 1:1. latestPrice, changePercent, volatilityRangePercent.
ProductFavorite
(userId, productId) bileşik anahtar. createdAt.
ProductBasket
(userId, productId) benzersiz. quantity Float, isActive true, optionId Int? (seçilen seçenek; boş = taban ürün). Seçenek silinince optionId boşalır (onDelete: SetNull).
Post
İçerik. title, description, image, video, priority, isActive, type (SLIDER / BANNER / STORY / ACADEMY), userType (hedef kitle), link, isteğe bağlı sahip, publishedAt / unPublishedAt, deletedAt.
Haftalık pencere (dördü birlikte veya dördü boş): startDayOfWeek, startTime (HH:mm), endDayOfWeek, endTime. Gün 0=Pazar … 6=Cumartesi. Saatler Europe/Istanbul. Dördü boşsa her zaman aktif sayılır.