upload_session_repository.rs
1 use sqlx::Transaction; 2 use uuid::Uuid; 3 4 use crate::{models::upload_session::UploadSession, registry_error::RegistryResult}; 5 6 use super::DB; 7 8 pub async fn insert( 9 transaction: &mut Transaction<'_, DB>, 10 prev_session: Option<Uuid>, 11 starting_byte_index: i32, 12 repository: &str, 13 ) -> RegistryResult<UploadSession> { 14 Ok(sqlx::query_as!( 15 UploadSession, 16 r#" 17 INSERT INTO upload_session(digest, starting_byte_index, repository, previous_session) 18 VALUES (null, $1, $2, $3) 19 RETURNING id, previous_session, starting_byte_index, digest, repository, created_at, is_finished 20 "#, 21 starting_byte_index, 22 repository, 23 prev_session, 24 ) 25 .fetch_one(&mut **transaction) 26 .await?) 27 } 28 29 pub async fn set_digest( 30 transaction: &mut Transaction<'_, DB>, 31 id: Uuid, 32 digest: &str, 33 ) -> RegistryResult<()> { 34 sqlx::query_as!( 35 UploadSession, 36 r#" 37 UPDATE upload_session 38 SET digest = $1 39 WHERE id = $2 40 "#, 41 digest, 42 id 43 ) 44 .execute(&mut **transaction) 45 .await?; 46 47 Ok(()) 48 } 49 50 pub async fn set_finished( 51 transaction: &mut Transaction<'_, DB>, 52 session_id: Uuid, 53 repository: &str, 54 ) -> RegistryResult<()> { 55 sqlx::query_as!( 56 UploadSession, 57 r#" 58 UPDATE upload_session 59 SET is_finished=TRUE 60 WHERE id = $1 AND repository = $2 61 "#, 62 session_id, 63 repository 64 ) 65 .execute(&mut **transaction) 66 .await?; 67 68 Ok(()) 69 } 70 71 pub async fn find_by_repository_and_id( 72 transaction: &mut Transaction<'_, DB>, 73 repository: &str, 74 session_id: Uuid, 75 ) -> RegistryResult<Option<UploadSession>> { 76 Ok(sqlx::query_as!( 77 UploadSession, 78 r#" 79 SELECT id, previous_session, starting_byte_index, digest, repository, created_at, is_finished 80 FROM upload_session 81 WHERE id = $1 AND repository = $2 82 "#, 83 session_id, 84 repository 85 ) 86 .fetch_optional(&mut **transaction) 87 .await?) 88 } 89 90 pub async fn try_find_by_previous_id( 91 transaction: &mut Transaction<'_, DB>, 92 repository: &str, 93 session_id: Uuid, 94 ) -> RegistryResult<Option<UploadSession>> { 95 Ok(sqlx::query_as!( 96 UploadSession, 97 r#" 98 SELECT id, previous_session, starting_byte_index, digest, repository, created_at, is_finished 99 FROM upload_session 100 WHERE previous_session = $1 AND repository = $2 101 "#, 102 session_id, 103 repository 104 ) 105 .fetch_optional(&mut **transaction) 106 .await?) 107 }