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 }