use crate::db::ap_object::insert::insert_ap_object;
use crate::db::ap_object::{ApObjectDbType, ApObjectVisibilityDbType};
use crate::logic::ap_object::new::new_html_ap_object;
use anyhow::{anyhow, Context};
use dialtone_common::rest::ap_objects::ap_object_model::CreateOwnedApObject;
use sqlx::PgPool;
pub async fn create_owned_ap_object(
pool: &PgPool,
host_name: &str,
preferred_user_name: &str,
actor_id: &str,
create_ap_object: &CreateOwnedApObject,
) -> anyhow::Result<String> {
let ap_object =
new_html_ap_object(host_name, preferred_user_name, actor_id, &create_ap_object)?;
let id = ap_object
.id
.clone()
.with_context(|| anyhow!("no ID created for AP Object"))?;
let visibility = ApObjectVisibilityDbType::Visible;
let ap_object_type = ApObjectDbType::from(&create_ap_object.ap_type);
insert_ap_object(
pool,
host_name,
&ap_object,
None,
ap_object_type,
None,
visibility,
)
.await?;
Ok(id)
}