/ backend / src / db / oauth_client_repository.rs
oauth_client_repository.rs
  1  use sqlx::{types::Uuid, Transaction};
  2  
  3  use crate::{models::oauth_client::OauthClient, util::accounts_error::AccountsResult};
  4  
  5  use super::DB;
  6  
  7  pub async fn insert(
  8      transaction: &mut Transaction<'_, DB>,
  9      client_id: &String,
 10      client_secret: &String,
 11      client_name: &String,
 12      redirect_uri: &String,
 13  ) -> AccountsResult<OauthClient> {
 14      Ok(sqlx::query_as!(
 15          OauthClient,
 16          "
 17  INSERT INTO oauth_client (client_id, client_secret, client_name, redirect_uri)
 18  VALUES                   ($1,        $2,            $3,          $4)
 19  RETURNING *
 20          ",
 21          client_id,
 22          client_secret,
 23          client_name,
 24          redirect_uri
 25      )
 26      .fetch_one(&mut **transaction)
 27      .await?)
 28  }
 29  
 30  pub async fn get_all(transaction: &mut Transaction<'_, DB>) -> AccountsResult<Vec<OauthClient>> {
 31      Ok(sqlx::query_as!(
 32          OauthClient,
 33          "
 34  SELECT *
 35  FROM oauth_client
 36          "
 37      )
 38      .fetch_all(&mut **transaction)
 39      .await?)
 40  }
 41  
 42  pub async fn get_by_client_name(
 43      transaction: &mut Transaction<'_, DB>,
 44      client_name: String,
 45  ) -> AccountsResult<Option<OauthClient>> {
 46      Ok(sqlx::query_as!(
 47          OauthClient,
 48          "
 49  SELECT *
 50  FROM oauth_client
 51  WHERE client_name=$1
 52          ",
 53          client_name
 54      )
 55      .fetch_optional(&mut **transaction)
 56      .await?)
 57  }
 58  
 59  pub async fn delete(
 60      transaction: &mut Transaction<'_, DB>,
 61      client: &OauthClient,
 62  ) -> AccountsResult<Option<OauthClient>> {
 63      Ok(sqlx::query_as!(
 64          OauthClient,
 65          "
 66  DELETE
 67  FROM oauth_client
 68  WHERE id=$1
 69  RETURNING *
 70          ",
 71          client.id
 72      )
 73      .fetch_optional(&mut **transaction)
 74      .await?)
 75  }
 76  
 77  pub async fn get_by_client_id(
 78      transaction: &mut Transaction<'_, DB>,
 79      client_id: &str,
 80  ) -> AccountsResult<Option<OauthClient>> {
 81      Ok(sqlx::query_as!(
 82          OauthClient,
 83          "
 84  SELECT *
 85  FROM oauth_client
 86  WHERE client_id=$1
 87      ",
 88          client_id
 89      )
 90      .fetch_optional(&mut **transaction)
 91      .await?)
 92  }
 93  
 94  pub async fn find_by_id(
 95      transaction: &mut Transaction<'_, DB>,
 96      id: &Uuid,
 97  ) -> AccountsResult<Option<OauthClient>> {
 98      Ok(sqlx::query_as!(
 99          OauthClient,
100          "
101  SELECT *
102  FROM oauth_client
103  WHERE id=$1
104      ",
105          id
106      )
107      .fetch_optional(&mut **transaction)
108      .await?)
109  }