Spaces:
Sleeping
Sleeping
| use chrono::{DateTime, Utc}; | |
| use serde::{Deserialize, Serialize}; | |
| /// A recurring billing plan defined by a merchant. | |
| pub struct SubscriptionPlan { | |
| pub id: String, | |
| pub merchant_id: String, | |
| pub name: String, | |
| pub description: Option<String>, | |
| pub price_inr: f64, | |
| /// Billing cycle length in days (30 = monthly, 365 = annual). | |
| pub interval_days: i32, | |
| pub trial_days: i32, | |
| pub is_active: bool, | |
| pub created_at: DateTime<Utc>, | |
| pub updated_at: DateTime<Utc>, | |
| } | |
| /// A single subscriber enrolled in a merchant's plan. | |
| pub struct Subscription { | |
| pub id: String, | |
| pub merchant_id: String, | |
| pub plan_id: String, | |
| pub subscriber_email: String, | |
| pub subscriber_phone: Option<String>, | |
| pub subscriber_name: String, | |
| pub status: String, | |
| pub current_period_start: DateTime<Utc>, | |
| pub current_period_end: DateTime<Utc>, | |
| pub cancelled_at: Option<DateTime<Utc>>, | |
| pub cancel_reason: Option<String>, | |
| pub metadata: Option<serde_json::Value>, | |
| pub created_at: DateTime<Utc>, | |
| pub updated_at: DateTime<Utc>, | |
| } | |
| /// A billing attempt record for a subscription cycle. | |
| pub struct SubscriptionBillingEvent { | |
| pub id: String, | |
| pub subscription_id: String, | |
| pub merchant_id: String, | |
| pub amount_inr: f64, | |
| pub status: String, | |
| pub transaction_id: Option<String>, | |
| pub attempt_count: i32, | |
| pub billed_at: DateTime<Utc>, | |
| pub settled_at: Option<DateTime<Utc>>, | |
| pub failure_reason: Option<String>, | |
| } | |
| // ─── Request / Response DTOs ───────────────────────────────────────────────── | |
| pub struct CreatePlanRequest { | |
| pub name: String, | |
| pub description: Option<String>, | |
| pub price_inr: f64, | |
| pub interval_days: i32, | |
| pub trial_days: Option<i32>, | |
| } | |
| pub struct CreateSubscriptionRequest { | |
| pub plan_id: String, | |
| pub subscriber_email: String, | |
| pub subscriber_phone: Option<String>, | |
| pub subscriber_name: String, | |
| pub metadata: Option<serde_json::Value>, | |
| } | |
| pub struct CancelSubscriptionRequest { | |
| pub reason: Option<String>, | |
| } | |
| pub struct SubscriptionSummary { | |
| pub active_count: i64, | |
| pub trial_count: i64, | |
| pub cancelled_count: i64, | |
| pub past_due_count: i64, | |
| pub mrr_inr: f64, // Monthly Recurring Revenue | |
| pub arr_inr: f64, // Annual Run Rate | |
| } | |