Bakiye bir iddia değil, bir toplamdır.
KolayMiles'ın çekirdeği bir muhasebe defteridir. Aşağıdakiler tasarım tercihi değil, sistemin uyduğu kurallar.
Yalnızca ekleme
Defter tabloları INSERT ve SELECT kabul eder.
UPDATE, DELETE ve TRUNCATE uygulama rolünden geri
alınmıştır. Bu bir kod nezaketi değil, veritabanı düzeyinde bir yetki kısıtıdır: uygulama
isteseydi bile geçmişi değiştiremez.
Bunun pratik sonucu, "bu bakiye neden bu sayı?" sorusunun her zaman cevabı olmasıdır. Her mil, hangi olgudan ve hangi kuralla doğduğunu taşıyan bir kayda kadar geri sarılır.
Bakiye saklanmaz
Hiçbir tabloda değiştirilebilir bir bakiye kolonu yoktur. Bakiye her okumada hareketlerin toplamı olarak hesaplanır.
Saklanan bakiye, er ya da geç geçmişiyle çelişir: iki eşzamanlı yazma, yarıda kalan bir iade, elle yapılmış bir düzeltme. Türetilen bakiyede bu sınıf hata mümkün değildir — çelişecek ikinci bir gerçek yoktur.
İade siler değil, telafi eder
Bir sipariş iade edildiğinde kazanım kaydı silinmez. Karşısına bir geri alma kaydı yazılır. Kısmi iade, kazanımı oransal olarak geri alır ve bakiyeyi hiçbir koşulda eksiye düşürmez.
Üye milleri çoktan harcamışsa, sistem harcanabilir olanı geri alır ve aradaki farkı gizlemek yerine bildirir. Farkın peşine düşülüp düşülmeyeceği bir işletme kararıdır; yazılımın onu sessizce yutması ise bir hata olurdu.
Tekrar iki kez ödüllendirmez
İdempotanlık şema kısıtlarıyla sağlanır, çağıranın dikkatiyle değil. Aynı iş anahtarıyla gelen ikinci istek, ilk kaydın kimliğini geri döndürür.
Aynı anahtarla farklı bir gövde gelirse bu sessizce yutulmaz — çakışma olarak bildirilir. Böyle bir istek üretici tarafında bir hatadır ve gizlenmesi, ileride açıklanamayacak bir bakiye üretir.
Ne zaman yazılır
Olay kaydı, mil kaydı ve dışa bildirim tek bir işlemde birlikte commit olur. Kaydı olmayan bir mil açıklanamaz; mili olmayan bir kayıt ise sessizce kaybolmuş bir ödüldür. İkisi de kabul edilemez, bu yüzden ikisi de aynı anda olur ya da hiçbiri olmaz.
Kural veridir
Kazanım kuralı — kaç liraya kaç mil, ne kadar süre geçerli — programa ait bir ayardır. Bir kampanya değişikliği satır düzenlemesidir, yeni bir sürüm çıkmak değil. Her ödül, hangi kural sürümüyle hesaplandığını da kaydeder; geçmiş bir kayıt bugünün kuralıyla yeniden yorumlanmaz.