summaryrefslogtreecommitdiff
path: root/src/branch
diff options
context:
space:
mode:
Diffstat (limited to 'src/branch')
-rw-r--r--src/branch/models.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/branch/models.rs b/src/branch/models.rs
index b631162..c8a8d65 100644
--- a/src/branch/models.rs
+++ b/src/branch/models.rs
@@ -17,6 +17,13 @@ pub struct Branch {
pub head: String,
}
+/// Struct used for forms
+pub struct BranchData {
+ pub name: String,
+ pub repository_id: Uuid,
+ pub head: String,
+}
+
impl Branch {
/// Find all branches
pub async fn find_all(pool: Pool) -> Result<Vec<Branch>, AppError> {
@@ -102,4 +109,40 @@ impl Branch {
}),
}
}
+
+ /// Create a new branch
+ pub async fn create(
+ pool: Pool,
+ data: &BranchData,
+ ) -> Result<Branch, AppError> {
+ let client = get_client(pool.clone()).await.unwrap();
+
+ let statement = client
+ .prepare(
+ "INSERT INTO repository(id, name, repository_id, head)
+ VALUES($1, $2, $3, $4)
+ RETURNING *",
+ )
+ .await?;
+
+ // Create a new UUID v4
+ let uuid = Uuid::new_v4();
+
+ let branch = client
+ .query_opt(
+ &statement,
+ &[&uuid, &data.name, &data.repository_id, &data.head],
+ )
+ .await?
+ .map(|row| Branch::from_row_ref(&row).unwrap());
+
+ match branch {
+ Some(branch) => Ok(branch),
+ None => Err(AppError {
+ message: Some("Error creating a new branch".to_string()),
+ cause: Some("Unknown error".to_string()),
+ error_type: AppErrorType::DbError,
+ }),
+ }
+ }
}