subscription_usage_meters.rs

 1use crate::llm::db::queries::subscription_usages::convert_chrono_to_time;
 2
 3use super::*;
 4
 5impl LlmDatabase {
 6    /// Returns all current subscription usage meters as of the given timestamp.
 7    pub async fn get_current_subscription_usage_meters(
 8        &self,
 9        now: DateTimeUtc,
10    ) -> Result<Vec<(subscription_usage_meter::Model, subscription_usage::Model)>> {
11        let now = convert_chrono_to_time(now)?;
12
13        self.transaction(|tx| async move {
14            let result = subscription_usage_meter::Entity::find()
15                .inner_join(subscription_usage::Entity)
16                .filter(
17                    subscription_usage::Column::PeriodStartAt
18                        .lte(now)
19                        .and(subscription_usage::Column::PeriodEndAt.gte(now)),
20                )
21                .select_also(subscription_usage::Entity)
22                .all(&*tx)
23                .await?;
24
25            let result = result
26                .into_iter()
27                .filter_map(|(meter, usage)| {
28                    let usage = usage?;
29                    Some((meter, usage))
30                })
31                .collect();
32
33            Ok(result)
34        })
35        .await
36    }
37}