Skip to content

Plan Yönetimi

Endpoint'ler

GET   /api/v1/admin/plans                  listele (pozisyona göre sıralı)
POST  /api/v1/admin/plans                  oluştur
PATCH /api/v1/admin/plans/:code            güncelle
POST  /api/v1/admin/plans/:code/archive    arşivle (yumuşak silme)

Hepsi admin gerektirir.

Plan alanları

typescript
{
  code: string,                    // 2–40 karakter, benzersiz kararlı tanımlayıcı
  name: string,                    // 1–80 karakter, görüntü adı
  description: string,             // 0–500 karakter
  position: number,                // fiyat tablosunda sıralama
  is_featured: boolean,            // yükseltme sayfasında vurgula
  is_public: boolean,              // public fiyat listesinde görünür
  is_active: boolean,              // yeni abonelikler için mevcut
  trial_days: number | null,
  prices: {
    try: { monthly: number, yearly: number },
    usd?: { monthly: number, yearly: number } | null,
  },
  limits: {
    social_accounts: number,
    posts_per_month: number,       // -1 = sınırsız
    ai_credits: number,
    team_members: number,
    storage_mb: number,
    scheduled_posts_max: number,
    marketplace_sales: number,
  },
  features: string[],              // insan-okunabilir madde işareti listesi
  metadata: Record<string, string>, // sağlayıcıya özgü ref'ler (Stripe price ID'leri vb.)
}

Sağlayıcı metadata

Stripe kullanırken, price ID'leri metadata'da sakla:

json
{
  "stripe_price_id_monthly": "price_1ABC...",
  "stripe_price_id_yearly": "price_1XYZ..."
}

Aynı pattern Iyzico (iyzico_subscription_pricing_plan_*) ve PayTR için de geçerlidir.

Arşivleme vs silme

Arşivle (is_active: false + lifecycle hook), planı yeni kayıtlardan gizler ama mevcut aboneleri korur. Geçmiş verilerin kazara kaybını önlemek için sert silme yoktur.

İlgili