use crate::DateTimeUtc; use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; /// Subscription record — tracks paid plans for users or projects. /// Each subscription defines quota limits (6h, weekly, monthly) and payment metadata. #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] #[sea_orm(table_name = "subscription")] pub struct Model { #[sea_orm(primary_key)] pub id: Uuid, /// Who is subscribed: "user" or "project" pub scope: String, /// The UUID of the user or project #[sea_orm(column_name = "scope_id")] pub scope_id: Uuid, /// Subscription start time pub start_at: DateTimeUtc, /// Subscription end (expiry) time pub end_at: DateTimeUtc, /// External order / transaction ID from payment platform #[sea_orm(column_type = "Text", nullable)] pub order_id: Option, /// Payment platform identifier (e.g. "stripe", "alipay", "wechat") pub platform: String, /// Human-readable plan name (e.g. "Pro Monthly", "Team Annual") #[sea_orm(column_type = "Text", nullable)] pub plan_name: Option, /// 6-hour quota limit (auto-reset every 6 hours) #[sea_orm(column_type = "Decimal(Some((20, 4)))", default_value = 0)] pub quota_6h: Decimal, /// 6-hour quota used so far in current window #[sea_orm(column_type = "Decimal(Some((20, 4)))", default_value = 0)] pub quota_6h_used: Decimal, /// Next 6-hour reset timestamp pub quota_6h_reset_at: Option, /// Weekly quota limit #[sea_orm(column_type = "Decimal(Some((20, 4)))", default_value = 0)] pub quota_weekly: Decimal, /// Weekly quota used so far #[sea_orm(column_type = "Decimal(Some((20, 4)))", default_value = 0)] pub quota_weekly_used: Decimal, /// Next weekly reset timestamp pub quota_weekly_reset_at: Option, /// Monthly quota limit #[sea_orm(column_type = "Decimal(Some((20, 4)))", default_value = 0)] pub quota_monthly: Decimal, /// Monthly quota used so far #[sea_orm(column_type = "Decimal(Some((20, 4)))", default_value = 0)] pub quota_monthly_used: Decimal, /// Whether subscription is currently active #[sea_orm(default_value = false)] pub is_active: bool, #[sea_orm(column_type = "Text")] pub currency: String, pub updated_at: DateTimeUtc, pub created_at: DateTimeUtc, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] pub enum Relation {} impl ActiveModelBehavior for ActiveModel {}