2026-10-26 22:56:39 +00:00
2026-10-26 22:56:48 +00:00
2026-10-26 22:56:39 +00:00
2026-10-26 22:56:40 +00:00

Numex İşletme — Dijital İşletme Yönetimi

Frontend + backend + kalıcı veri katmanı çalışan, operasyonel tutarlılığı önceleyen işletme yönetim uygulaması.

Çalıştırma

npm install
npm run seed        # izole demo veri (4 ürün, 3 müşteri)
npm start           # http://localhost:4173 (port doluysa boş port)

Panel: tarayıcıda açılan adres. API: http://localhost:<port>/api/...

Mimari

┌──────────────────────────────────────────────┐
│  public/index.html — Operasyon Paneli        │
│  Panel · Siparişler · Stok · Müşteriler       │
│  Teslimat · Risk İzleme · Operasyon Kayıtları │
└───────────────────┬──────────────────────────┘
                    │ fetch /api/*
┌───────────────────▼──────────────────────────┐
│  server/api.js — Express                     │
│  ├── YETKİ KAPISI (403 + gerekçe + karar)    │
│  ├── rotalar (müşteri, sipariş, ödeme...)    │
│  └── statik panel                            │
├──────────────────────────────────────────────┤
│  server/isletme.js — iş mantığı              │
│  ├── siparisOlustur  (BEGIN IMMEDIATE)       │
│  ├── odemeAl / odemeKesinlestir (idempotent) │
│  └── teslimatGuncelle / siparisIptal         │
├──────────────────────────────────────────────┤
│  server/risk.js — kurtarma + risk motoru     │
│  ├── kurtarmaCalistir()  (açılışta)          │
│  └── riskTarama() / oneriUret()              │
├──────────────────────────────────────────────┤
│  server/db.js — SQLite (WAL, synchronous=FULL)│
│  data/isletme.db  ← kalıcı veri              │
└──────────────────────────────────────────────┘

Veri tutarlılığı kuralları (diske gömülü)

Kural Nerede
Negatif stok imkânsız CHECK (stok >= 0) + trigger trg_products_stok_guard
Aşırı rezervasyon imkânsız UPDATE ... WHERE stok - rezerve >= adet (tek ifadede kontrol+yazma)
Sipariş başına tek başarılı ödeme UNIQUE INDEX ux_payments_basarili WHERE durum='BASARILI'
Aynı idempotency anahtarı tek kez UNIQUE INDEX ux_payments_idem, orders.idempotency_key UNIQUE
Çökmede veri kaybı yok WAL + synchronous=FULL, niyet yazımı tahsilattan önce
Belirsiz ödeme otomatik tekrarlanmaz kurtarmaCalistir() → yarimKalan (operatör onayı)

Sınavlar

node scripts/sinavlar.mjs           # SINAV 1, 3, 4
node scripts/sinav2-hazirla.mjs     # SINAV 2 çökme anını kurgular

SINAV 2 tam akış: hazırla → süreci öldür → yeniden başlat → GET /api/orders/<id> (durum ODENDI, tek ödeme).

API

Metot Yol Açıklama
GET /api/dashboard Panel özeti
GET/POST /api/customers Müşteri listele / ekle
GET/POST /api/orders Sipariş listele / oluştur (stok rezerve)
GET /api/orders/:id Sipariş detayı + risk
POST /api/orders/:id/pay Ödeme simülasyonu (idempotency_key)
POST /api/orders/:id/shipment Teslimat durumu
POST /api/orders/:id/cancel İptal (rezervasyon serbest)
GET /api/products Stok (stok, rezerve, kullanılabilir)
GET /api/risk Risk bulguları + kanıt + öneri
GET /api/ops, /api/decisions Operasyon ve karar kayıtları

Reddedilen işlemler: DELETE /api/customers/:id, DELETE /api/orders/:id, POST /api/files, POST /api/db/* → 403 YETKISIZ_ISLEM + gerekçe.

Yapılmayanlar (bilinçli)

  • Gerçek ödeme sağlayıcısı bağlanmadı (simülasyon).
  • Gerçek müşteriye mesaj gönderilmedi; dış sistem değiştirilmedi.
  • Müşteri/sipariş kaydı silme ucu yok (iptal/arşivleme tercih edilir).
  • Riskli siparişlerde otomatik aksiyon yok; yalnız tespit + öneri.

Ayrıntılı kararlar: KARAR_DEFTERI.md.

S
Description
Küçük işletme için yönetim paneli: müşteri, sipariş, stok, ödeme ve teslimat. Aynı anda gelen siparişlerde çift satış ve eksi stok olmaz, ödeme sırasında sunucu çökerse açılışta kurtarılır, geciken siparişler kanıtıyla risk listesine düşer; müşteri silme gibi yıkıcı işlemler onaysız yapılmaz. Express + SQLite; canlı demoda veriler 30 dakikada bir sıfırlanır.
Readme
79 KiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 59.9%
HTML 40.1%