forked from alemi/upub
feat: fill undo ids for user in outbound activities
This commit is contained in:
parent
c14531afc8
commit
f36c249803
2 changed files with 21 additions and 3 deletions
|
@ -1,7 +1,7 @@
|
||||||
use sea_orm::EntityTrait;
|
use sea_orm::EntityTrait;
|
||||||
use reqwest::Method;
|
use reqwest::Method;
|
||||||
|
|
||||||
use apb::{LD, Node, ActivityMut};
|
use apb::{LD, ActivityMut};
|
||||||
use upub::{Context, model, traits::Fetcher};
|
use upub::{Context, model, traits::Fetcher};
|
||||||
|
|
||||||
pub async fn process(ctx: Context, job: &model::job::Model) -> crate::JobResult<()> {
|
pub async fn process(ctx: Context, job: &model::job::Model) -> crate::JobResult<()> {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use apb::{target::Addressed, Activity, ActivityMut, BaseMut, Object, ObjectMut};
|
use apb::{field::OptionalString, target::Addressed, Activity, ActivityMut, Base, BaseMut, Object, ObjectMut};
|
||||||
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter, QuerySelect, SelectColumns, TransactionTrait};
|
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter, QueryOrder, QuerySelect, SelectColumns, TransactionTrait};
|
||||||
use upub::{model, traits::{Addresser, Processor}, Context};
|
use upub::{model, traits::{Addresser, Processor}, Context};
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,6 +26,24 @@ pub async fn process(ctx: Context, job: &model::job::Model) -> crate::JobResult<
|
||||||
.set_actor(apb::Node::link(job.actor.clone()))
|
.set_actor(apb::Node::link(job.actor.clone()))
|
||||||
.set_published(Some(now));
|
.set_published(Some(now));
|
||||||
|
|
||||||
|
if matches!(t, apb::ObjectType::Activity(apb::ActivityType::Undo)) {
|
||||||
|
let mut undone = activity.object().extract().ok_or(crate::JobError::MissingPayload)?;
|
||||||
|
if undone.id().is_err() {
|
||||||
|
let undone_target = undone.object().id().str().ok_or(crate::JobError::MissingPayload)?;
|
||||||
|
let undone_type = undone.activity_type().map_err(|_| crate::JobError::MissingPayload)?;
|
||||||
|
let undone_model = model::activity::Entity::find()
|
||||||
|
.filter(model::activity::Column::Object.eq(&undone_target))
|
||||||
|
.filter(model::activity::Column::Actor.eq(&job.actor))
|
||||||
|
.filter(model::activity::Column::ActivityType.eq(undone_type))
|
||||||
|
.order_by_desc(model::activity::Column::Published)
|
||||||
|
.one(&tx)
|
||||||
|
.await?
|
||||||
|
.ok_or_else(|| sea_orm::DbErr::RecordNotFound(format!("actor={},type={},object={}",job.actor, undone_type, undone_target)))?;
|
||||||
|
undone = undone.set_id(Some(&undone_model.id));
|
||||||
|
}
|
||||||
|
activity = activity.set_object(apb::Node::object(undone));
|
||||||
|
}
|
||||||
|
|
||||||
if matches!(t, apb::ObjectType::Activity(apb::ActivityType::Create)) {
|
if matches!(t, apb::ObjectType::Activity(apb::ActivityType::Create)) {
|
||||||
let raw_oid = Context::new_id();
|
let raw_oid = Context::new_id();
|
||||||
let oid = ctx.oid(&raw_oid);
|
let oid = ctx.oid(&raw_oid);
|
||||||
|
|
Loading…
Reference in a new issue