/ backend / src / db / repository_repository.rs
repository_repository.rs
 1  use sqlx::Transaction;
 2  use uuid::Uuid;
 3  
 4  use crate::{
 5      models::repository::{Repository, ViewableRepository},
 6      registry_error::RegistryResult,
 7  };
 8  
 9  use super::DB;
10  
11  pub async fn insert(
12      transaction: &mut Transaction<'_, DB>,
13      owner: &Uuid,
14      namespace: &str,
15  ) -> RegistryResult<Repository> {
16      Ok(sqlx::query_as!(
17          Repository,
18          r#"
19  INSERT INTO repository(owner, namespace_name)
20  VALUES                ($1,    $2)
21  RETURNING id, owner, namespace_name, created_at
22          "#,
23          owner,
24          namespace
25      )
26      .fetch_one(&mut **transaction)
27      .await?)
28  }
29  
30  pub async fn find_by_name(
31      transaction: &mut Transaction<'_, DB>,
32      namespace: &str,
33  ) -> RegistryResult<Repository> {
34      Ok(sqlx::query_as!(
35          Repository,
36          r#"
37  SELECT id, owner, namespace_name, created_at
38  FROM repository
39  WHERE namespace_name = $1
40          "#,
41          namespace
42      )
43      .fetch_one(&mut **transaction)
44      .await?)
45  }
46  
47  pub async fn get_all(transaction: &mut Transaction<'_, DB>) -> RegistryResult<Vec<Repository>> {
48      Ok(sqlx::query_as!(
49          Repository,
50          r#"
51  SELECT id, owner, namespace_name, created_at
52  FROM repository
53          "#
54      )
55      .fetch_all(&mut **transaction)
56      .await?)
57  }
58  
59  pub async fn find_all_with_owners(
60      transaction: &mut Transaction<'_, DB>,
61  ) -> RegistryResult<Vec<ViewableRepository>> {
62      Ok(sqlx::query_as!(
63          ViewableRepository,
64          r#"
65  SELECT r.namespace_name, r.created_at, o.username
66  FROM repository r
67  JOIN owner o ON o.id = r.owner
68          "#
69      )
70      .fetch_all(&mut **transaction)
71      .await?)
72  }