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}