diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2025-01-07 22:08:56 +0100 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2025-01-07 22:08:56 +0100 |
| commit | 5203148ffdd8e27ae158d7bfb8527508a716ce6c (patch) | |
| tree | f076887196c9fd2d8864f55059ee1c46c8a329b5 /server/src/main.rs | |
| parent | 13056242ab976b766bbff345d9b22e3aa9ad4a94 (diff) | |
Add remote & branch to project and review
Preparing for git connection.
Diffstat (limited to 'server/src/main.rs')
| -rw-r--r-- | server/src/main.rs | 70 |
1 files changed, 38 insertions, 32 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 596eb5b..88546cb 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -153,7 +153,7 @@ async fn get_project( .unwrap(); let project = sqlx::query!( - "SELECT id,title,description FROM projects WHERE id=?", + "SELECT id,title,description,remote,main_branch FROM projects WHERE id=?", projectid ) .fetch_one(&mut ***db) @@ -161,6 +161,8 @@ async fn get_project( id: r.id, title: r.title, description: r.description, + remote: r.remote, + main_branch: r.main_branch, users, }) .map_err(|_| NotFound("No such project")) @@ -189,7 +191,7 @@ async fn project( #[utoipa::path( responses( - (status = 200, description = "Project updated", body = api_model::Project), + (status = 200, description = "Project created", body = api_model::Project), ), security( ("session" = []), @@ -207,9 +209,11 @@ async fn project_new( let mut tx = db.begin().await.unwrap(); projectid = sqlx::query!( - "INSERT INTO projects (title, description) VALUES (?, ?)", + "INSERT INTO projects (title, description, remote, main_branch) VALUES (?, ?, ?, ?)", data.title.unwrap_or("Unnamed"), - data.description.unwrap_or("") + data.description.unwrap_or(""), + data.remote.unwrap_or(""), + data.main_branch.unwrap_or("main"), ) .execute(&mut *tx) .map_ok(|r| r.last_insert_id()) @@ -274,21 +278,24 @@ async fn project_update( ) -> Result<&'static str, Custom<&'static str>> { project_check_maintainer(&mut db, session, projectid).await?; - if data.title.is_none() && data.description.is_none() { - // Nothing to update. Treat as "success". - } else { - let mut update_builder: db_utils::UpdateBuilder<sqlx::MySql> = - db_utils::UpdateBuilder::new(); - update_builder.table("projects"); + let mut update_builder: db_utils::UpdateBuilder<sqlx::MySql> = db_utils::UpdateBuilder::new(); + update_builder.table("projects"); - if let Some(title) = &data.title { - update_builder.set("title", title); - } - if let Some(description) = &data.description { - update_builder.set("description", description); - } - update_builder.and_where("id", "=", projectid); + if let Some(title) = &data.title { + update_builder.set("title", title); + } + if let Some(description) = &data.description { + update_builder.set("description", description); + } + if let Some(remote) = &data.remote { + update_builder.set("remote", remote); + } + if let Some(main_branch) = &data.main_branch { + update_builder.set("main_branch", main_branch); + } + update_builder.and_where("id", "=", projectid); + if update_builder.ok() { let (query, args) = update_builder.build(); let mut query_builder: sqlx::QueryBuilder<sqlx::MySql> = @@ -360,22 +367,19 @@ async fn project_user_update( project_check_maintainer(&mut db, session, projectid).await?; } - if data.default_role.is_none() && data.maintainer.is_none() { - // Nothing to update. Treat as "success". - } else { - let mut update_builder: db_utils::UpdateBuilder<sqlx::MySql> = - db_utils::UpdateBuilder::new(); - update_builder.table("project_users"); + let mut update_builder: db_utils::UpdateBuilder<sqlx::MySql> = db_utils::UpdateBuilder::new(); + update_builder.table("project_users"); - if let Some(default_role) = &data.default_role { - update_builder.set("default_role", u8::from(*default_role)); - } - if let Some(maintainer) = &data.maintainer { - update_builder.set("maintainer", maintainer); - } - update_builder.and_where("project", "=", projectid); - update_builder.and_where("user", "=", userid); + if let Some(default_role) = &data.default_role { + update_builder.set("default_role", u8::from(*default_role)); + } + if let Some(maintainer) = &data.maintainer { + update_builder.set("maintainer", maintainer); + } + update_builder.and_where("project", "=", projectid); + update_builder.and_where("user", "=", userid); + if update_builder.ok() { let (query, args) = update_builder.build(); let mut query_builder: sqlx::QueryBuilder<sqlx::MySql> = @@ -497,7 +501,7 @@ async fn review( let mut projectid = 0; let mut review = sqlx::query!( - "SELECT reviews.id AS id,project,title,description,state,progress,users.id AS user_id,users.username AS username,users.name AS name,users.dn AS user_dn FROM reviews JOIN users ON users.id=owner WHERE reviews.id=?", + "SELECT reviews.id AS id,project,title,description,state,progress,branch,archived,users.id AS user_id,users.username AS username,users.name AS name,users.dn AS user_dn FROM reviews JOIN users ON users.id=owner WHERE reviews.id=?", reviewid) .fetch_one(&mut **db) .map_ok(|r| { @@ -516,6 +520,8 @@ async fn review( users: Vec::new(), state: api_model::ReviewState::try_from(r.state).unwrap(), progress: r.progress, + branch: r.branch, + archived: r.archived != 0, } }) .map_err(|_| NotFound("No such review")) |
