1use crate::db::UserId;
2
3use super::*;
4
5impl LlmDatabase {
6 pub async fn get_subscription_usage_for_period(
7 &self,
8 user_id: UserId,
9 period_start_at: DateTimeUtc,
10 period_end_at: DateTimeUtc,
11 ) -> Result<Option<subscription_usage::Model>> {
12 self.transaction(|tx| async move {
13 self.get_subscription_usage_for_period_in_tx(
14 user_id,
15 period_start_at,
16 period_end_at,
17 &tx,
18 )
19 .await
20 })
21 .await
22 }
23
24 async fn get_subscription_usage_for_period_in_tx(
25 &self,
26 user_id: UserId,
27 period_start_at: DateTimeUtc,
28 period_end_at: DateTimeUtc,
29 tx: &DatabaseTransaction,
30 ) -> Result<Option<subscription_usage::Model>> {
31 Ok(subscription_usage::Entity::find()
32 .filter(subscription_usage::Column::UserId.eq(user_id))
33 .filter(subscription_usage::Column::PeriodStartAt.eq(period_start_at))
34 .filter(subscription_usage::Column::PeriodEndAt.eq(period_end_at))
35 .one(tx)
36 .await?)
37 }
38}