AnadoluPay paketlerinin paylaştığı, dile bağlı olmayan verinin tek kaynağı. Kod içermez.
Aynı ödeme kütüphanesi üç dilde yaşıyor — PHP, Node.js, Go. Bir sağlayıcının durum kodu eşlemesi değiştiğinde bunun üç yerde birlikte değişmesi gerekiyor. Üç kopyayı elle senkron tutmak sürdürülebilir değil: sapma sessizce olur ve ödeme yolunda sessiz sapmanın bedeli, yanlış eşlenmiş bir durumun "başarılı" sanılmasıdır.
| Dosya | İçerik |
|---|---|
data/currencies.json |
ISO 4217 alfabetik → sayısal para birimi kodları |
data/order-status.json |
Sağlayıcı durum kodlarının ortak duruma eşlenmesi |
schema/*.schema.json |
Editör ve dış araçlar için JSON Schema |
tools/validate.py |
Değişmez denetimi; bağımlılık gerektirmez |
Uç adresleri. Banka ve sağlayıcı adresleri kullanıcı yapılandırmasından gelir, paketlerde gömülü değildir; paylaşılan veri değil.
Test kartları. Ayrı repoda tutulur: Voxyfy/test-kartlari.
İmza kuralları ve alan adları. Bunlar veri gibi görünse de koddur: hangi alanın imzaya hangi sırayla girdiği, sağlayıcının protokolüne gömülü bir davranıştır ve dilden bağımsız bir tabloya indirgenmesi yanlış bir soyutlama olur.
Her paket data/ dosyalarının bir kopyasını kendi deposunda
taşıyor ve uygunluk testiyle kendi yerel tablosunu bu kopyaya karşı
doğruluyor. Kod üretimi (codegen) kullanılmıyor.
Bunun nedeni, üretilen kodun taşıyamayacağı bir şeyin var olması:
sözlüklerdeki açıklamalar. PARATIKA.MR'ın neden kasıtlı olarak
pending olduğunu, MOKA kodunun tek başına neden yetmediğini anlatan
yorumlar, o kodun okunduğu yerde durmalı. Üretilen bir dosya bunları ya
kaybeder ya da JSON'a taşıyıp okunmaz hâle getirir.
Uygunluk testi bu bedeli ödemeden aynı garantiyi veriyor: yerel tablo JSON'dan saparsa test kırılır, sapma sessizce birleştirilemez.
Bir dil bir sözlüğü tamamen atlayabilir — Go ve Node sürümleri
PARAM'ı taşımaz çünkü o sürücü onlarda yok. Atlama, testte gerekçesi
yazılmış açık bir listeyle bildirilir; böylece eksiklik kaza ile
karışmaz.
Her iki dosya aynı version alanını taşır ve birlikte ilerler.
Tüketiciler beklediği sürümü testinde sabit olarak tutar.
Bir değişikliği uçtan uca geçirmek:
- Bu repoda veriyi düzenle,
version'ı yükselt,tools/validate.pyçalıştır. - Üç tüketici repoya
data/dosyalarını kopyala. - Her repoda uygunluk testi kırılacak; yerel tabloyu ve beklenen sürüm sabitini güncelle.
Üçüncü adım atlanırsa o paketin testi kırık kalır — istenen davranış budur. Sürüm alanlarının repolar arasında karşılaştırılması, hangi paketin geride kaldığını görmenin yoludur.
python3 tools/validate.pyŞemanın ifade edemediği kuralları da denetler: aynı sayısal para birimi
kodunun iki alfabetik koda düşmemesi, hiçbir kodun unknown'a
eşlenmemesi (o bir eşleme hedefi değil, eşlenemeyen kodun yedeğidir) ve
iki dosyanın sürümlerinin aynı olması.
MIT. Bkz. LICENSE.md.