summaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/main.rs')
-rw-r--r--server/src/main.rs70
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"))