dialtone_sqlx 0.1.0

Dialtone SQLx Back-End
Documentation
use crate::db::return_optional;
use dialtone_common::ap::ap_object::{ApObject, ApObjectType};
use sqlx::{Executor, Postgres};

use super::ApObjectDbType;

pub async fn fetch_random_ap_object_by_actor(
    exec: impl Executor<'_, Database = Postgres>,
    ap_object_type: &ApObjectType,
    actor_id: &str,
) -> Result<Option<ApObject>, sqlx::Error> {
    let ap_object_type = ApObjectDbType::from(ap_object_type);
    let sql = r#"
        select activity_pub_json
        from ap_object 
        where 
            actor_owner = $1
            and
            type = $2
            and
            visibility = 'Visible'
        order by random()
        limit 1
    "#;
    let result = sqlx::query(sql)
        .bind(actor_id)
        .bind(ap_object_type)
        .fetch_optional(exec)
        .await?;
    return_optional(&result)
}