Geliştirici ve mobil uygulama altyapısı
Sırmava'nın web sitesi, iOS/Android uygulaması ve mağaza paneli tek bir monorepoda aynı çekirdeği paylaşır. Canlı altın fiyatı, işçilik kuralları, fiyat kilidi ve ödeme akışı bir kez yazılır; her ekran ve sunucu aynı sonucu verir. Bu demoda veri tarayıcıda tutulur, kurulumda tek satırla gerçek sunucuya bağlanır.
Paket mimarisi
apps/webReact 18 + Vite, ön işlenmiş sayfalar, sanal deneme (tarayıcıda)apps/mobileExpo / React Native: iOS ve Android tek kodapps/web › /panelRoller: patron, e-ticaret, atölye, depo-kargo, destek, muhasebepackages/apiApiClient · MockAdapter (demo) ↔ HttpAdapter (kurulum)packages/coreCanlı fiyat motoru (milyem, işçilik, taş, KDV), fiyat kilidi, sepet, sipariş durum makinesi, atölye, ödeme sözleşmesi, zodpackages/tokensRenk, aralık, köşe, yazı — web CSS ve RN stilleri tek kaynaktandocs/openapi.yamlAynı çekirdekle doğrular; fiyat akışı (SSE), kilit kaydıcore/odemePayTR iFrame · iyzico Checkout Form · Demoadaptör arayüzleriLisanslı fiyat sağlayıcı, gram stok/ERP, e-Arşiv, sigortalı kargoKural: hiçbir ekran yerel depoya doğrudan erişmez; her okuma/yazma api.* üzerinden gider. Demo MockAdapter işlemleri olay olarak sekmeler arasında yayar — paneldeki makas değişikliği ya da satış duraklatma müşteri ekranına anında düşer.
Tek fiyat motoru: bu yüzük gerçekten hesaplandı
import { piyasaAn, urunFiyat } from '@sirmava/core'
const piyasa = piyasaAn(Date.now(), fiyatAyar) // has altın ₺/g
const d = urunFiyat(urun, { ayar: '14', renk: 'sari', olcu: 14 },
{ piyasa, fiyat: fiyatAyar, kampanyalar })
// d.maden = gram × milyem × has satış (+ makas)
// d.iscilik = gram başı | % | sabit (kural ezebilir)
// d.kdv = (işçilik + taş) × oran — altın, mevzuata göre
// web, mobil, panel ve sunucu: aynı sonuç| Örnek burgu yüzük2,40 g · 14 ayar (585 milyem) · 1,400 g has · ölçü 14 | 10.965,00 ₺ |
| Maden1,400 g × 6.228,55 ₺/g | 8.744,88 ₺ |
| İşçilik (%16) | 1.399,18 ₺ |
| Taş (zirkon) | 450,00 ₺ |
| KDV (%20 · işçilik + taş) | 369,84 ₺ |
| Toplam (5 ₺'ye yuvarlı) | 10.965,00 ₺ |
Demo — örnek fiyatlar, gerçek piyasa verisi değildir; kurulumda lisanslı fiyat sağlayıcı bağlanır.
Mobil uygulama ekran haritası
React Native iskeleti bu depodaki apps/mobile klasöründedir ve tip denetiminden geçer. Her ekranın kullandığı çekirdek fonksiyon aşağıda; bu fonksiyonlar web'de de aynıdır.
- 01KeşfetKategori, koleksiyon, canlı "başlayan" fiyat
kartFiyat · fiyatGirdi - 02ÜrünAyar · renk · ölçü, şeffaf fiyat dökümü
urunFiyat · varyantGram - 03SepetFiyat kilidi sayacı, güncel fiyatla yenile
sepetHesapla · kilitYenile - 04ÖdemeSağlayıcının güvenli sayfası WebView içinde
/v1/odeme/baslat · 3D Secure - 05SiparişlerimAtölye → kalite → sigortalı kargo
adimlar · DURUM_AD - 06FiyatlarCanlı alış/satış, çeyrek, gram altın
kalemFiyatlari · piyasaAn - 07Fiyat alarmıHedef fiyata inince push bildirim
FiyatAlarmi · /v1/ben/alarmlar - 08Sanal denemeKamera ile küpe/kolye/yüzük (cihazda)
ArTur · dekupe görsel
Yerel yetenekler kurulumda eklenir: push bildirim (fiyat alarmı, sipariş ve atölye durumu), kamera ile sanal deneme, ödeme WebView'i. Ayrıntı: Mobil uygulama.
Ödeme sağlayıcı adaptörleri
Üç adaptör aynı OdemeSaglayici arayüzünü uygular: odemeBaslat, ucDSecureTamamla, iade, iptal, taksitSorgula, callbackDogrula. İmza üreten çağrılar yalnız sunucuda çalışır; kriptografi dışarıdan enjekte edilir, böylece aynı kod React Native'de de derlenir. Kuyumcuda ön provizyon kullanılmaz: fiyat kilitli olduğu için kesin tutar ödeme anında bellidir, iadeler kısmi ya da tam iadeyle yapılır.
| Sağlayıcı | Taksit | Kart saklama | Kısmi iade | Barındırılan ödeme formu | Akış |
|---|---|---|---|---|---|
| PayTR | Var | Var | Var | Var | get-token (sunucu, HMAC-SHA256) → iFrame → imzalı bildirim → "OK" |
| iyzico | Var | Var | Var | Var | Checkout Form initialize (IYZWSv2) → token → sunucu sorgusu (detail) → sipariş |
| Demo | Var | Var | Var | — | Ağ isteği yok; test kartlarıyla başarılı / yetersiz bakiye / 3D hatası / zaman aşımı |
Yüksek tutarlı siparişte ek doğrulama adımı istenir; test kipindeki ödeme sipariş ve tahsilat yazmaz. Ödeme altyapısı ayrıntıları · Demo — gerçek ödeme alınmaz. Sağlayıcı arayüzleri ve logoları kullanılmaz.
Fiyat, ERP ve e-Fatura entegrasyon noktaları
interface FiyatSaglayici { // lisanslı canlı fiyat
an(): Promise<PiyasaAn> // has/gümüş alış-satış
akis(f: (p: PiyasaAn) => void): () => void
}
interface GramStokKaynagi { // ERP / kasa
hasStok(magaza: string): Promise<{ altin: Gram; gumus: Gram }>
parcalar(degisenSonra: Iso): Promise<TekilParca[]>
}
interface KargoSaglayici { // değer beyanlı sigortalı kargo
etiket(s: Siparis, deger: Kurus): Promise<{ takip: string; pdf: string }>
}
interface EBelgeSaglayici { // e-Arşiv / e-Fatura entegratörü
faturaKes(s: Siparis): Promise<{ ettn: string; pdf: string }>
}- Canlı fiyat: lisanslı sağlayıcıdan has altın ve gümüş alış/satış; panelde kalem bazında makas ve elle fiyat kipi.
- Gram stok / ERP: has gram ve tekil parça (seri no, sertifika) stoku; mağaza ve online satış aynı stoğu kullanır.
- Sigortalı kargo: değer beyanlı gönderi etiketi ve takip numarası.
- e-Arşiv / e-Fatura: altın takıda KDV matrahı mevzuata göre ayrıştırılarak belge kesilir.
- Pazaryerleri: ürün eşleştirme ve canlı fiyatla stok/fiyat gönderimi (adaptör arayüzü).
Demo — gerçek bağlantı yok; kurulumda kurumun yetkisi ve sağlayıcının arayüzü üzerinden bağlanır.
API sözleşmesi (OpenAPI 3.1)
Fiyat, katalog, sepet ve fiyat kilidi, siparişler, müşteri, ödeme ve panel uçları; bütün tutarlar kuruş. Uçlara tıklayıp şema, örnek istek ve curl komutunu görebilirsiniz. openapi.yaml
Sık sorulanlar
Web sitesi, mobil uygulama ve panel aynı altın fiyatını nasıl hesaplıyor?
Canlı has altın/gümüş fiyatı, makas, işçilik kuralları, taş, KDV ve fiyat kilidi tek bir çekirdek pakette (@sirmava/core) hesaplanır. Web, React Native uygulaması, mağaza paneli ve sunucu aynı fonksiyonu çağırır; tutarlar kuruş cinsinden tamsayıdır, yuvarlama farkı oluşmaz.
Fiyat kilidi sunucuda nasıl korunur?
Sepete ekleme isteğinde sunucu o anın fiyatını hesaplar ve kilit kaydını (birim fiyat, has fiyatı, bitiş) saklar. Ödeme başlatılırken kilit süresi denetlenir; süre dolmuşsa ödeme açılmaz ve müşteriden güncel fiyatı onaylaması istenir. Böylece altın fiyatı ödeme sırasında değişse de müşteri gördüğü fiyattan öder.
Canlı fiyat kaynağı nereden gelir?
Bu demoda fiyatlar belirlenimci bir simülasyondur (bütün sekmelerde aynı). Kurulumda lisanslı bir fiyat sağlayıcısı ya da mağazanın kendi elle girdiği fiyatlar bağlanır; panelde kalem bazında makas ve ani dalgalanmada satışı duraklatma kuralı vardır.
Mobil uygulama hazır mı?
Expo / React Native iskeleti bu depoda: Keşfet, Ürün (varyant ve canlı fiyat), Sepet (kilit sayacı), Siparişlerim ve Fiyatlar ekranları çekirdeği paylaşır ve tip denetiminden geçer. Kurulumda markanın görselleri, push bildirimi (fiyat alarmı, sipariş durumu), kamera ile sanal deneme ve ödeme WebView akışı eklenip mağazalara gönderilir.
PayTR ve iyzico birlikte kullanılabilir mi?
Evet. Panelde etkin ve yedek sağlayıcı seçilir; etkin sağlayıcı hata verirse ödeme yedeğe düşer. İki sağlayıcı da aynı OdemeSaglayici arayüzünü uygular; gizli anahtarlar yalnız sunucuda durur.