Kupon Yönetimi
Endpoint'ler
GET /api/v1/admin/coupons listele (sıralı -createdAt)
POST /api/v1/admin/coupons oluştur
PATCH /api/v1/admin/coupons/:code güncelle
POST /api/v1/admin/coupons/:code/archive arşivleKupon alanları
typescript
{
code: string, // 2–40 karakter, kayıtta büyük harfe çevrilir, benzersiz
description: string, // 0–500 karakter
kind: "percent" | "fixed" | "trial_extension",
value: number, // >= 0; anlamı kind'e bağlıdır
currency: "TRY" | "USD" | null, // percent / trial_extension için null
applies_to: ("new" | "renewal" | "upgrade")[], // varsayılan ["new", "upgrade"]
allowed_plans: string[], // plan kodları; boş = hepsi
min_amount: number, // hak kazanmak için minimum sepet değeri
usage_limit: number, // 0 = sınırsız
usage_count: number, // yalnız okunur, kullanımda artırılır
single_use_per_user: boolean, // varsayılan true
valid_from: Date | null,
valid_until: Date | null,
is_active: boolean,
}Davranış
percent, alt-toplamdanvalueyüzde indirim yapar.fixed,valuebirimcurrencyindirim yapar.trial_extension, planın denemesinevalueekstra gün ekler.single_use_per_user, aynı kullanıcının kodu iki kez kullanmasını engeller; tek alıcı için admin-verilen kodlar tipik olarak bunu açık bırakır.
Kodlar büyük/küçük harf duyarsız
Kod oluşturma anında büyük harfe çevrilir ve trim'lenir; checkout büyük/küçük harfe duyarsız eşleştirir.