dialtone_sqlx 0.1.0

Dialtone SQLx Back-End
Documentation
use const_format::concatcp;
use sqlx::{Executor, Postgres};

use dialtone_common::rest::actors::actor_model::OwnedActor;

use crate::db::actor::OWNER_ACTOR_JSON_OBJECT;
use crate::db::return_optional;

pub async fn fetch_owned_actor_by_id(
    exec: impl Executor<'_, Database = Postgres>,
    actor_id: &str,
) -> Result<Option<OwnedActor>, sqlx::Error> {
    let sql = concatcp!(
        "select",
        OWNER_ACTOR_JSON_OBJECT,
        r#"
        as "owned_actor: Json<OwnedActor>" from actor where id = $1 and visibility != 'Banned'
        "#
    );
    let result = sqlx::query(sql).bind(actor_id).fetch_optional(exec).await?;
    return_optional(&result)
}

pub async fn fetch_owned_actor_by_acct(
    exec: impl Executor<'_, Database = Postgres>,
    acct: &str,
) -> Result<Option<OwnedActor>, sqlx::Error> {
    let sql = concatcp!(
        "select",
        OWNER_ACTOR_JSON_OBJECT,
        r#"
        as "owned_actor: Json<OwnedActor>" from actor where acct = $1 and visibility != 'Banned'
        "#
    );
    let result = sqlx::query(sql).bind(acct).fetch_optional(exec).await?;
    return_optional(&result)
}

pub async fn fetch_default_owned_actor(
    exec: impl Executor<'_, Database = Postgres>,
    user_acct: &str,
) -> Result<Option<OwnedActor>, sqlx::Error> {
    let sql = concatcp!(
        "select",
        OWNER_ACTOR_JSON_OBJECT,
        r#"
        as "owned_actor: Json<OwnedActor>" 
        from 
          actor, actor_owner 
        where 
          user_owner = $1 
        and
          id = actor_id
        and 
          visibility != 'Banned'
        and
          default_actor = true
        "#
    );
    let result = sqlx::query(sql)
        .bind(user_acct)
        .fetch_optional(exec)
        .await?;
    return_optional(&result)
}