use serde_json::json;
use crate::{Rub, Rujira};
use super::{Method, Rq, REST_BASE};
pub fn create(bot: Rujira, key: &str, name: &str, project_type_key: &str, lead: &str) -> Rq {
Rq::new(bot)
.uri(&format!("{}/project", REST_BASE))
.method(Method::POST)
.add_payload("key", json!(key))
.add_payload("name", json!(name))
.add_payload("projectTypeKey", json!(project_type_key))
.add_payload("lead", json!(lead))
}
pub fn update(
bot: Rujira,
project_id_or_key: &str,
update: serde_json::Value,
expand: Option<&str>,
) -> Rq {
Rq::new(bot)
.uri(&format!("{}/project/{}", REST_BASE, project_id_or_key))
.method(Method::PUT)
.apply_if(expand, |r, v| r.add_params(vec![("expand", v)]))
.load_payload(update)
}
pub fn delete(bot: Rujira, project_id_or_key: &str) -> Rq {
Rq::new(bot)
.uri(&format!("{}/project/{}", REST_BASE, project_id_or_key))
.method(Method::DELETE)
}
pub fn list(
bot: Rujira,
include_archived: Option<bool>,
browse_archive: Option<bool>,
expand: Option<&str>,
recent: Option<u8>,
) -> Rq {
Rq::new(bot)
.uri(&format!("{}/project", REST_BASE))
.method(Method::GET)
.add_params(vec![(
"includeArchived",
include_archived.unwrap_or(false).to_static(),
)])
.add_params(vec![(
"browseArchive",
browse_archive.unwrap_or(false).to_static(),
)])
.apply_if(expand, |r, v| r.add_params(vec![("expand", v)]))
.apply_if(recent, |r, v| {
if v > 20 {
tracing::debug!("Recent limit is 20");
};
r.add_params(vec![("recent", v.to_string().as_str())])
})
}
pub fn get(bot: Rujira, project_id_or_key: &str, expand: Option<&str>) -> Rq {
Rq::new(bot)
.uri(&format!("{}/project/{project_id_or_key}", REST_BASE))
.method(Method::GET)
.apply_if(expand, |r, v| r.add_params(vec![("expand", v)]))
}
pub fn archive(bot: Rujira, project_id_or_key: &str) -> Rq {
Rq::new(bot)
.uri(&format!(
"{}/project/{project_id_or_key}/archive",
REST_BASE
))
.method(Method::PUT)
}
pub fn components(bot: Rujira, project_id_or_key: &str) -> Rq {
Rq::new(bot)
.uri(&format!(
"{}/project/{project_id_or_key}/components",
REST_BASE
))
.method(Method::PUT)
}
pub fn restore(bot: Rujira, project_id_or_key: &str) -> Rq {
Rq::new(bot)
.uri(&format!(
"{}/project/{project_id_or_key}/restore",
REST_BASE
))
.method(Method::PUT)
}
pub fn r#type(bot: Rujira, project_id_or_key: &str, project_type_key: &str) -> Rq {
Rq::new(bot)
.uri(&format!(
"{}/project/{project_id_or_key}/type/{project_type_key}",
REST_BASE
))
.method(Method::PUT)
}
pub fn version(
bot: Rujira,
project_id_or_key: &str,
order_by: Option<&str>,
expand: Option<&str>,
max_results: Option<u32>,
start_at: Option<u32>,
) -> Rq {
Rq::new(bot)
.uri(&format!(
"{}/project/{project_id_or_key}/version",
REST_BASE
))
.method(Method::GET)
.apply_if(order_by, |r, v| r.add_params(vec![("orderBy", v)]))
.apply_if(expand, |r, v| r.add_params(vec![("expand", v)]))
.apply_if(max_results, |r, v| {
r.add_params(vec![("maxResults", v.to_string().as_str())])
})
.apply_if(start_at, |r, v| {
r.add_params(vec![("startAt", v.to_string().as_str())])
})
}
pub fn versions(bot: Rujira, project_id_or_key: &str, expand: Option<&str>) -> Rq {
Rq::new(bot)
.uri(&format!(
"{}/project/{project_id_or_key}/versions",
REST_BASE
))
.method(Method::GET)
.apply_if(expand, |r, v| r.add_params(vec![("expand", v)]))
}