/ backend / src / db / user_client_consent_repository.rs
user_client_consent_repository.rs
 1  use sqlx::Transaction;
 2  use uuid::Uuid;
 3  
 4  use crate::{
 5      models::{oauth_client::OauthClient, user_client_consent::UserClientConsent},
 6      util::accounts_error::AccountsResult,
 7  };
 8  
 9  use super::DB;
10  
11  pub async fn insert(
12      transaction: &mut Transaction<'_, DB>,
13      client: &OauthClient,
14      account_id: &Uuid,
15  ) -> AccountsResult<UserClientConsent> {
16      Ok(sqlx::query_as!(
17          UserClientConsent,
18          " 
19  INSERT INTO user_client_consent (client_id, account_id)
20  VALUES                          ($1,        $2)
21  RETURNING id, client_id, account_id, consented_on
22          ",
23          client.id,
24          account_id,
25      )
26      .fetch_one(&mut **transaction)
27      .await?)
28  }
29  
30  pub async fn get_by_client_and_account(
31      transaction: &mut Transaction<'_, DB>,
32      client: &OauthClient,
33      account_id: &Uuid,
34  ) -> AccountsResult<Option<UserClientConsent>> {
35      Ok(sqlx::query_as!(
36          UserClientConsent,
37          "
38  SELECT id, client_id, account_id, consented_on
39  FROM user_client_consent
40  WHERE client_id = $1 AND account_id = $2
41          ",
42          client.id,
43          account_id,
44      )
45      .fetch_optional(&mut **transaction)
46      .await?)
47  }
48  
49  pub async fn delete_by_client(
50      transaction: &mut Transaction<'_, DB>,
51      client: &OauthClient,
52  ) -> AccountsResult<()> {
53      sqlx::query_as!(
54          UserClientConsent,
55          "
56  DELETE
57  FROM user_client_consent
58  WHERE client_id = $1
59      ",
60          client.id
61      )
62      .execute(&mut **transaction)
63      .await?;
64  
65      Ok(())
66  }