fix(kredi): paketliden liste ve revizyon kredisi düşmez #6

Merged
bilal merged 2 commits from odeme/paket-vaadi into main 2026-09-22 23:34:44 +03:00
Owner

/paket "liste dahil" diyor ama kod paketli kullanıcıdan da liste başına 3, revizyon başına 3 kredi düşüyordu. 299 TL ödeyen en fazla 51 soru sorabiliyordu; artık vaat edilen 60 gerçekten 60.

Uygulama

Tek const maliyet = user.hasPaket ? 0 : RAPOR_KREDI iki fonksiyonda altı yeri kapatıyor: harcama ×2, iade ×2, dönen bakiye ×2. Fark modalı paketliye kredi bedeli göstermez.

Kaldırılmayanlar — bilerek

spendCredits / grantCredits çağrılarının hiçbiri silinmedi:

  • uniqueIndex("ledger_reason_ref") üretimin tek idempotency çapası
  • İade çağrısı "önceki deneme başarısız mıydı" sorusunu o satırın varlığıyla cevaplıyor
  • İade dalı koşullanmasaydı her başarısız revizyon sınırsız tekrarlanabilir +3 kredi verirdi

Güvenlik denetimi: merge edilebilir

Yazılımcının "koddan çıkarım" diye işaretlediği kritik soru izole test veritabanında koşturularak kesinleştirildi: amount=0 ve bakiye 0 iken rowsAffected = 1, INSUFFICIENT dönmüyor, delta 0 satırı yazılıyor ve ikinci insert UNIQUE kısıtına takılıyor. Paketin vaadi kodda tutuyor.

Mutabakat etkilenmiyor: iyzico sorgusu yalnız reason IN ('purchase','topup') üzerinden yürüyor.

Kuyruğa giren üç iş (merge'e engel değil)

  • F1 (orta): paketlide üretimin kredi freni kalktı, yerine sınır konmadı — repoda rate limit yok; eski tavan 60÷3 ≈ 20 üretimdi. Maliyet riski.
  • F2 (düşük): credits.ts:174 delta 0 iade de krediBittiAt'ı null'lıyor.
  • F3 (düşük): KrediYetersiz modalı paketlide ulaşılamaz oldu.

Doğrulama: next typegen ✓ · tsc --noEmit 0 · lint 0 · 6/6 kabul grep'i · entegrasyon build'i temiz.

`/paket` "liste dahil" diyor ama kod paketli kullanıcıdan da liste başına 3, revizyon başına 3 kredi düşüyordu. 299 TL ödeyen en fazla 51 soru sorabiliyordu; artık vaat edilen 60 gerçekten 60. ### Uygulama Tek `const maliyet = user.hasPaket ? 0 : RAPOR_KREDI` iki fonksiyonda **altı yeri** kapatıyor: harcama ×2, iade ×2, dönen bakiye ×2. Fark modalı paketliye kredi bedeli göstermez. ### Kaldırılmayanlar — bilerek `spendCredits` / `grantCredits` çağrılarının hiçbiri silinmedi: - `uniqueIndex("ledger_reason_ref")` üretimin **tek idempotency çapası** - İade çağrısı "önceki deneme başarısız mıydı" sorusunu o satırın varlığıyla cevaplıyor - İade dalı koşullanmasaydı her başarısız revizyon **sınırsız tekrarlanabilir +3 kredi** verirdi ### Güvenlik denetimi: merge edilebilir Yazılımcının "koddan çıkarım" diye işaretlediği kritik soru izole test veritabanında **koşturularak** kesinleştirildi: `amount=0` ve bakiye 0 iken `rowsAffected = 1`, `INSUFFICIENT` **dönmüyor**, `delta 0` satırı yazılıyor ve ikinci insert UNIQUE kısıtına takılıyor. Paketin vaadi kodda tutuyor. Mutabakat etkilenmiyor: iyzico sorgusu yalnız `reason IN ('purchase','topup')` üzerinden yürüyor. ### Kuyruğa giren üç iş (merge'e engel değil) - **F1 (orta):** paketlide üretimin kredi freni kalktı, yerine sınır konmadı — repoda rate limit yok; eski tavan 60÷3 ≈ 20 üretimdi. Maliyet riski. - **F2 (düşük):** `credits.ts:174` `delta 0` iade de `krediBittiAt`'ı null'lıyor. - **F3 (düşük):** `KrediYetersiz` modalı paketlide ulaşılamaz oldu. Doğrulama: `next typegen` ✓ · `tsc --noEmit` 0 · `lint` 0 · 6/6 kabul grep'i · entegrasyon build'i temiz.
bilal added 2 commits 2026-09-22 23:34:30 +03:00
/paket "liste ve revizyon dâhil" diyor, kod her üretimde 3 kredi
düşüyordu. Tek `maliyet = user.hasPaket ? 0 : RAPOR_KREDI` değişkeni
harcama, iade ve dönen bakiye satırlarını birden kapatıyor.

spendCredits/grantCredits çağrıları bilerek duruyor: ledger'daki
UNIQUE(reason, ref_id) üretimin tek idempotency çapası ve DUPLICATE
dalındaki "önceki deneme başarısızdı" çıkarımı refund satırının
varlığına dayanıyor. İade tutarı da koşullu — yoksa harcaması 0 olan
paketli her başarısız denemede bedava 3 kredi kazanırdı.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sunucu artık paketliden kredi düşmüyor; arayüz hâlâ "3 kredi düşer" ve
"Listemi güncelle — 3 kredi" diyordu. raporKredi prop'u paketliye 0
iner, modal tek `ucretsiz` bayrağıyla üç metin yerini buna bağlar.
Kredi mantığı (krediYeter, KrediYetersiz dalı) olduğu gibi kalır.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bilal merged commit c5769e2fbb into main 2026-09-22 23:34:44 +03:00
bilal deleted branch odeme/paket-vaadi 2026-09-22 23:34:47 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bilal/kolaytercih#6