Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Sipariş sürecindeki taraf ilişkileri

Gerçek ilişki mi, kopya mı, tekil mi?

Sipariş sürecindeki taraflar üç farklı şekilde BuyerOrder'a bağlanıyor — hepsi aynı güçte değil:

  • Gerçek ilişki (Mongoose ref): sorgulanabilir, populate edilebilir.
  • Anlık kopya (embedded copy): o an nasıl göründüğünü saklar; canlı kayda geri dönüş yok.
  • Gevşek referans (düz string ID): iki taraf da aynı ID'yi metin olarak tutar, ama veritabanı seviyesinde bir bağ yok — populate edilemez, sadece uygulama kodu ID'yi elle eşler.

Taraf taraf durum

TarafOrder'a bağlanma şekliNot
BuyerAnlık kopya (BuyerCopy, buyerAddress, buyerInvoiceAddress)Sipariş anındaki alıcı/adres bilgisini dondurur — bilinçli tasarım.
WarehouseAnlık kopya (WarehouseCopy)Aynı şekilde dondurulmuş.
OfficerAnlık kopya (pickerOfficer, buyerOfficers)Aynı şekilde dondurulmuş.
SellerYok — doğrudan bağ yokSadece StockEntry.seller üzerinden dolaylı (2 sıçrama), otomatik populate edilmiyor.
PaymentGerçek ilişki, tek yönlüpurchase.payment: ObjectId ref 'Payment'Ters yönde Payment.orderId sadece string, ref tanımlı değil — Payment'tan Order'a populate edilemez.
TransferGerçek ilişkitransfers[] ve item bazlı transfer, ref: 'BuyerOrderTransfer'İki yönde de sorgulanabilir.
Stock (yeni)Gerçek ilişki — item bazlı stockEntryReferences[] (ref: 'StockEntry'), stockExitReference (ref: 'StockExit')Bu zincir zaten StockEntry.seller'a kadar uzanıyor — bkz. Yeni ihtiyaçlar.
Stock (eski)Gerçek ilişkistockInReferences[], stockOutReferenceLegacy sistemin paralel kalıntısı.
InvoiceGevşek referans — Order tarafında sadece düz bir özet (BuyerOrderInvoice: documentNo, uuid, tutar); Invoice tarafında invoiceLineReferences[].referenceId sadece string, ref yokİki yönde de gerçek ilişki yok.
Financial / CariGevşek referansAccountTransaction.referenceId / referenceType sadece string, ref yok, referenceType için enum bile tanımlı değil (yorum satırında "ORDER, PAYMENT vs." yazıyor)En gevşek bağ burada.
Product (catalog)Kopya (productId: number)Mongo→MySQL arası olduğundan native ref zaten mümkün değil.

Sonuç

Karışık bir tablo: Payment, Transfer ve Stock tarafı gerçek Mongoose ilişkileriyle bağlı — sorgulanabilir, zincirlenebilir. Invoice ve Financial/Cari tarafı ise gerçekten tekil yaşıyor — order ile aralarında veritabanı seviyesinde hiçbir bağ yok, sadece iki ayrı koleksiyonda aynı ID'nin metin olarak durmasına güveniliyor. Ayrıca bu iki modül birbirinden habersiz, aynı problemi (gevşek referans) farklı şekilde çözmüş: invoice bir type enum'u tanımlamış (InvoiceLineReferenceType.ORDER), financial ise referenceType için enum bile tanımlamamış.

Bu, Yeni ihtiyaçlar sayfasındaki "satış-alış izlenebilirliği" ihtiyacının asıl can alıcı noktası: stok zinciri zaten sağlam, ama fatura ve cari tarafı sipariş sürecinden yapısal olarak kopuk.

Açık soru

v2'de Invoice.invoiceLineReferences ve AccountTransaction.referenceId/referenceType alanlarının gerçek Mongoose ObjectId + ref ilişkilerine çevrilmesi (ya da en azından iki modülün ortak, tutarlı bir "discriminated reference" deseni kullanması) gündeme alınmalı.

Bu sayfa sadece satış tarafını (order'ın kendisini) inceliyor. Alış tarafı (satıcıdan giren mal) ve iki yönlü iade için: Uçtan uca izlenebilirlik.