|
|
|
|
@ -19,7 +19,7 @@ where
|
|
|
|
|
{
|
|
|
|
|
pub fn new(tx: &'c mut Box<E>) -> Collection<'c, E> {
|
|
|
|
|
let all = sqlx::query::<sqlx::Postgres>(
|
|
|
|
|
"SELECT id, name
|
|
|
|
|
"SELECT id, name, uuid
|
|
|
|
|
FROM robots
|
|
|
|
|
WHERE
|
|
|
|
|
(CASE WHEN $1::BOOLEAN THEN (id = $2::INTEGER) ELSE TRUE END)
|
|
|
|
|
@ -54,8 +54,8 @@ where
|
|
|
|
|
Ok(v) => v
|
|
|
|
|
.into_iter()
|
|
|
|
|
.map(|d| {
|
|
|
|
|
let (id, name) = <(i64, String)>::from_row(&d)?;
|
|
|
|
|
Ok(robots::Robot { id: id, name: name })
|
|
|
|
|
let (_, name, uuid) = <(i64, String, sqlx::types::Uuid)>::from_row(&d)?;
|
|
|
|
|
Ok(robots::Robot { uuid: uuid::Uuid::from_u128(uuid.as_u128()), name: name })
|
|
|
|
|
})
|
|
|
|
|
.collect(),
|
|
|
|
|
Err(e) => Err(HandlingError::DBError(e)),
|
|
|
|
|
@ -80,16 +80,16 @@ where
|
|
|
|
|
pub async fn add(
|
|
|
|
|
tx: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
|
|
|
|
|
m: robots::RobotModel,
|
|
|
|
|
) -> Result<i64, HandlingError> {
|
|
|
|
|
) -> Result<uuid::Uuid, HandlingError> {
|
|
|
|
|
let r: robots::Robot = m.into();
|
|
|
|
|
let result = sqlx::query("INSERT INTO robots (name) VALUES ($1::TEXT) RETURNING id")
|
|
|
|
|
let result = sqlx::query("INSERT INTO robots (name) VALUES ($1::TEXT) RETURNING id, uuid")
|
|
|
|
|
.bind(r.name)
|
|
|
|
|
.fetch_one(tx)
|
|
|
|
|
.await;
|
|
|
|
|
match result {
|
|
|
|
|
Ok(v) => {
|
|
|
|
|
let (id,) = <(i64,)>::from_row(&v)?;
|
|
|
|
|
Ok(id)
|
|
|
|
|
let (_, uuid) = <(i64, sqlx::types::Uuid,)>::from_row(&v)?;
|
|
|
|
|
Ok(uuid::Uuid::from_u128(uuid.as_u128()))
|
|
|
|
|
}
|
|
|
|
|
Err(sqlx::Error::RowNotFound) => Err(HandlingError::NotFound),
|
|
|
|
|
Err(e) => Err(HandlingError::DBError(e)),
|
|
|
|
|
@ -98,16 +98,17 @@ pub async fn add(
|
|
|
|
|
|
|
|
|
|
pub async fn get_by_id(
|
|
|
|
|
tx: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
|
|
|
|
|
id: i64,
|
|
|
|
|
uuid: uuid::Uuid,
|
|
|
|
|
) -> Result<robots::Robot, HandlingError> {
|
|
|
|
|
let result = sqlx::query("SELECT * FROM robots WHERE id = $1::INTEGER")
|
|
|
|
|
.bind(id)
|
|
|
|
|
let db_uuid = sqlx::types::Uuid::from_u128(uuid.as_u128());
|
|
|
|
|
let result = sqlx::query("SELECT id, name, uuid FROM robots WHERE uuid = $1::UUID")
|
|
|
|
|
.bind(db_uuid)
|
|
|
|
|
.fetch_one(tx)
|
|
|
|
|
.await;
|
|
|
|
|
match result {
|
|
|
|
|
Ok(v) => {
|
|
|
|
|
let (id, name) = <(i64, String)>::from_row(&v)?;
|
|
|
|
|
Ok(robots::Robot { id: id, name: name })
|
|
|
|
|
let (_, name, uuid) = <(i64, String, sqlx::types::Uuid)>::from_row(&v)?;
|
|
|
|
|
Ok(robots::Robot { uuid: uuid::Uuid::from_u128(uuid.as_u128()), name: name })
|
|
|
|
|
}
|
|
|
|
|
Err(sqlx::Error::RowNotFound) => Err(HandlingError::NotFound),
|
|
|
|
|
Err(e) => Err(HandlingError::DBError(e)),
|
|
|
|
|
@ -119,9 +120,10 @@ pub async fn update(
|
|
|
|
|
m: robots::RobotModel,
|
|
|
|
|
) -> Result<(), HandlingError> {
|
|
|
|
|
let r: robots::Robot = m.into();
|
|
|
|
|
let result = sqlx::query("UPDATE robots SET name = $1::TEXT WHERE id = $2::INTEGER")
|
|
|
|
|
let db_uuid = sqlx::types::Uuid::from_u128(r.uuid.as_u128());
|
|
|
|
|
let result = sqlx::query("UPDATE robots SET name = $1::TEXT WHERE uuid = $2::UUID")
|
|
|
|
|
.bind(r.name)
|
|
|
|
|
.bind(r.id)
|
|
|
|
|
.bind(db_uuid)
|
|
|
|
|
.execute(tx)
|
|
|
|
|
.await;
|
|
|
|
|
match result {
|
|
|
|
|
@ -137,10 +139,11 @@ pub async fn update(
|
|
|
|
|
|
|
|
|
|
pub async fn delete(
|
|
|
|
|
tx: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
|
|
|
|
|
id: i64,
|
|
|
|
|
uuid: uuid::Uuid,
|
|
|
|
|
) -> Result<(), HandlingError> {
|
|
|
|
|
let result = sqlx::query("DELETE FROM robots WHERE id = $1::INTEGER")
|
|
|
|
|
.bind(id)
|
|
|
|
|
let db_uuid = sqlx::types::Uuid::from_u128(uuid.as_u128());
|
|
|
|
|
let result = sqlx::query("DELETE FROM robots WHERE uuid = $1::UUID")
|
|
|
|
|
.bind(db_uuid)
|
|
|
|
|
.execute(tx)
|
|
|
|
|
.await;
|
|
|
|
|
match result {
|
|
|
|
|
|