dialtone_sqlx 0.1.0

Dialtone SQLx Back-End
Documentation
use sqlx::types::Json;
use sqlx::{Executor, Postgres, Row};

use dialtone_common::rest::actors::actor_model::UpdateOwnerActorAp;

pub async fn update_actor_ap(
    exec: impl Executor<'_, Database = Postgres>,
    actor_ap: UpdateOwnerActorAp,
    actor_id: &str,
) -> Result<Option<()>, sqlx::Error> {
    let result = sqlx::query(
        r#"
        update actor
        set activity_pub_json = activity_pub_json || $1
        where id = $2
        returning id
        "#,
    )
    .bind(Json(actor_ap))
    .bind(actor_id)
    .fetch_optional(exec)
    .await?;
    match result {
        None => Ok(None),
        Some(row) => {
            row.try_get::<String, usize>(0)?;
            Ok(Some(()))
        }
    }
}

pub async fn update_actor_ap_by_owner(
    exec: impl Executor<'_, Database = Postgres>,
    actor_ap: UpdateOwnerActorAp,
    actor_id: &str,
    user_owner: &str,
) -> Result<Option<()>, sqlx::Error> {
    let result = sqlx::query(
        r#"
        update actor
        set activity_pub_json = activity_pub_json || $1
        from actor_owner
        where actor.id = $2
        and actor.id = actor_owner.actor_id and actor_owner.user_owner = $3
        returning id
        "#,
    )
    .bind(Json(actor_ap))
    .bind(actor_id)
    .bind(user_owner)
    .fetch_optional(exec)
    .await?;
    match result {
        None => Ok(None),
        Some(row) => {
            row.try_get::<String, usize>(0)?;
            Ok(Some(()))
        }
    }
}