Channel add behavior now also returns the same new channel that was just added
! We do this because in order to `get` the channel later we need its id. Some clients will be updating channel data periodically so this helps to make smaller queries possible
This commit is contained in:
parent
700da3695f
commit
4668ce7d0f
@ -154,5 +154,40 @@ impl FromDB<Channel, Integer> for Channel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Channel {
|
impl Channel {
|
||||||
pub async fn add() {}
|
pub async fn add(p: &Pool, name: &str, desc: &str, kind: Integer) -> Response<Self> {
|
||||||
|
//! @returns on success -> Response::Row<Channel>
|
||||||
|
//! @returns on partial success -> Response::Empty
|
||||||
|
//! @returns on failure -> Response::Other
|
||||||
|
if let Ok(conn) = p.get_conn().await {
|
||||||
|
let q = "INSERT INTO channels (name, description, kind) VALUES (:n, :d, :k)";
|
||||||
|
let insert_result = conn.drop_exec(q, params!{
|
||||||
|
"n" => name,
|
||||||
|
"d" => desc,
|
||||||
|
"k" => kind
|
||||||
|
}).await;
|
||||||
|
if let Ok(conn) = insert_result {
|
||||||
|
// This is only kosher because names are enforced as unique by sql
|
||||||
|
let q = "SELECT id FROM channels WHERE name = :name";
|
||||||
|
let fetch_result : Result<(Conn, Option<UBigInt>), SqlError> =
|
||||||
|
conn.first_exec(q, params!{"name" => name}).await;
|
||||||
|
|
||||||
|
return match fetch_result {
|
||||||
|
Ok((_, id_opt)) => {
|
||||||
|
if let Some(id) = id_opt {
|
||||||
|
Response::Row(Channel {
|
||||||
|
id: id,
|
||||||
|
name: name.into(),
|
||||||
|
description: Some(desc.into()),
|
||||||
|
kind: kind
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else { Response::Empty }
|
||||||
|
},
|
||||||
|
Err(_) => Response::Empty
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return Response::Other("Could fetch new channel".into());
|
||||||
|
}
|
||||||
|
return Response::Other(no_conn!("db::channels::add"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user