diff --git a/json-api/db/src/lib.rs b/json-api/db/src/lib.rs index 564d421..e8848ec 100644 --- a/json-api/db/src/lib.rs +++ b/json-api/db/src/lib.rs @@ -1,4 +1,4 @@ -use serde::Serialize; +use serde::{Serialize, Deserialize}; pub mod member; pub mod common; @@ -92,7 +92,7 @@ pub struct PublicMember { pub permissions: UBigInt, } -#[derive(Serialize)] +#[derive(Deserialize, Serialize)] pub struct Neighbor { pub name: String, pub description: Option, diff --git a/json-api/db/src/neighbors.rs b/json-api/db/src/neighbors.rs index a922d06..4dd111e 100644 --- a/json-api/db/src/neighbors.rs +++ b/json-api/db/src/neighbors.rs @@ -21,7 +21,7 @@ pub async fn add_neighbor(p: &Pool, url: &str, wsurl: &str, name: &str, desc: &s // writing it to the db let mut conn = p.get_conn().await?; let q = "INSERT INTO neighbors(url, wsurl, name, description, tags) - VALUES(:url, :wsurl, :name, :description, :tags)"; + VALUES(:url, :wsurl, :name, :desc, :tags)"; let sqlparams = params!{ "url"=> url, "wsurl"=>wsurl, @@ -32,3 +32,43 @@ pub async fn add_neighbor(p: &Pool, url: &str, wsurl: &str, name: &str, desc: &s conn.exec_drop(q, sqlparams).await?; Ok(()) } + +pub async fn get(p: &Pool, url: &str) -> SqlResult> { + let mut conn = p.get_conn().await?; + let q = "SELECT wsurl, name, description, tags FROM neighbors + WHERE url = :url"; + + type Fields = (Option, String, Option, String); + let row: Option = conn.exec_first(q, params!{"url" => url}).await?; + if let Some(fields) = row { + let tags: Vec = serde_json::from_str(fields.3.as_str()).unwrap_or(vec![]); + let n = Neighbor { + name: fields.1, + wsurl: fields.0, + description: fields.2, + tags, + url: url.into(), + }; + return Ok(Some(n)); + } + Ok(None) +} + +pub async fn update(p: &Pool, url: &str, new: Neighbor) -> SqlResult<()> { + let mut conn = p.get_conn().await?; + let q = "UPDATE neighbors + SET name = :nm, description = :desc, tags = :tags, wsurl = :ws, url = :newurl + WHERE url = :url"; + + let sqlparams = params!{ + "url" => url, + "nm" => new.name, + "desc" => new.description, + "tags" => serde_json::to_string(&new.tags).unwrap(), + "ws" => new.wsurl, + "newurl" => new.url + }; + + conn.exec_drop(q, sqlparams).await?; + Ok(()) +}