fix: proper addressing creation for likes

This commit is contained in:
əlemi 2024-04-14 05:53:36 +02:00
parent b11da7f3c0
commit 8a14600311
Signed by: alemi
GPG key ID: A4895B84D311642C

View file

@ -30,11 +30,12 @@ impl apb::server::Inbox for Context {
} }
async fn like(&self, activity: serde_json::Value) -> crate::Result<()> { async fn like(&self, activity: serde_json::Value) -> crate::Result<()> {
let aid = activity.actor().id().ok_or(UpubError::bad_request())?; let aid = activity.id().ok_or(UpubError::bad_request())?;
let uid = activity.actor().id().ok_or(UpubError::bad_request())?;
let oid = activity.object().id().ok_or(UpubError::bad_request())?; let oid = activity.object().id().ok_or(UpubError::bad_request())?;
let like = model::like::ActiveModel { let like = model::like::ActiveModel {
id: sea_orm::ActiveValue::NotSet, id: sea_orm::ActiveValue::NotSet,
actor: sea_orm::Set(aid.clone()), actor: sea_orm::Set(uid.clone()),
likes: sea_orm::Set(oid.clone()), likes: sea_orm::Set(oid.clone()),
date: sea_orm::Set(chrono::Utc::now()), date: sea_orm::Set(chrono::Utc::now()),
}; };
@ -42,7 +43,7 @@ impl apb::server::Inbox for Context {
Err(sea_orm::DbErr::RecordNotInserted) => Err(UpubError::not_modified()), Err(sea_orm::DbErr::RecordNotInserted) => Err(UpubError::not_modified()),
Err(sea_orm::DbErr::Exec(_)) => Err(UpubError::not_modified()), // bad fix for sqlite Err(sea_orm::DbErr::Exec(_)) => Err(UpubError::not_modified()), // bad fix for sqlite
Err(e) => { Err(e) => {
tracing::error!("unexpected error procesing like from {aid} to {oid}: {e}"); tracing::error!("unexpected error procesing like from {uid} to {oid}: {e}");
Err(UpubError::internal_server_error()) Err(UpubError::internal_server_error())
} }
Ok(_) => { Ok(_) => {
@ -51,13 +52,13 @@ impl apb::server::Inbox for Context {
.exec(self.db()) .exec(self.db())
.await?; .await?;
let expanded_addressing = self.expand_addressing(activity.addressed()).await?; let expanded_addressing = self.expand_addressing(activity.addressed()).await?;
self.address_to(&aid, None, &expanded_addressing).await?; self.address_to(aid, None, &expanded_addressing).await?;
model::object::Entity::update_many() model::object::Entity::update_many()
.col_expr(model::object::Column::Likes, Expr::col(model::object::Column::Likes).add(1)) .col_expr(model::object::Column::Likes, Expr::col(model::object::Column::Likes).add(1))
.filter(model::object::Column::Id.eq(oid.clone())) .filter(model::object::Column::Id.eq(oid.clone()))
.exec(self.db()) .exec(self.db())
.await?; .await?;
tracing::info!("{} liked {}", aid, oid); tracing::info!("{} liked {}", uid, oid);
Ok(()) Ok(())
}, },
} }