diff --git a/apps/labrinth/src/models/v3/billing.rs b/apps/labrinth/src/models/v3/billing.rs index 1e9055e5d..9c46675ac 100644 --- a/apps/labrinth/src/models/v3/billing.rs +++ b/apps/labrinth/src/models/v3/billing.rs @@ -49,6 +49,7 @@ pub enum Price { #[serde(rename_all = "kebab-case")] pub enum PriceDuration { Monthly, + Quarterly, Yearly, } @@ -56,6 +57,7 @@ impl PriceDuration { pub fn duration(&self) -> chrono::Duration { match self { PriceDuration::Monthly => chrono::Duration::days(30), + PriceDuration::Quarterly => chrono::Duration::days(90), PriceDuration::Yearly => chrono::Duration::days(365), } } @@ -63,19 +65,27 @@ impl PriceDuration { pub fn from_string(string: &str) -> PriceDuration { match string { "monthly" => PriceDuration::Monthly, + "quarterly" => PriceDuration::Quarterly, "yearly" => PriceDuration::Yearly, _ => PriceDuration::Monthly, } } + pub fn as_str(&self) -> &'static str { match self { PriceDuration::Monthly => "monthly", + PriceDuration::Quarterly => "quarterly", PriceDuration::Yearly => "yearly", } } pub fn iterator() -> impl Iterator { - vec![PriceDuration::Monthly, PriceDuration::Yearly].into_iter() + vec![ + PriceDuration::Monthly, + PriceDuration::Quarterly, + PriceDuration::Yearly, + ] + .into_iter() } } diff --git a/apps/labrinth/src/routes/internal/billing.rs b/apps/labrinth/src/routes/internal/billing.rs index 4fec9bb5b..2c4920da9 100644 --- a/apps/labrinth/src/routes/internal/billing.rs +++ b/apps/labrinth/src/routes/internal/billing.rs @@ -1856,6 +1856,7 @@ pub async fn stripe_webhook( "source": source, "payment_interval": metadata.charge_item.subscription_interval.map(|x| match x { PriceDuration::Monthly => 1, + PriceDuration::Quarterly => 3, PriceDuration::Yearly => 12, }) }))