]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/activities/voting/vote.rs
Rewrite fetcher (#1792)
[lemmy.git] / crates / apub / src / activities / voting / vote.rs
index cd7d04c54906de2d24f49575b1e0a9468b0c608c..69a9c3ba91567da7bddd87993ff9ee8c34b43090 100644 (file)
@@ -8,10 +8,7 @@ use crate::{
   },
   activity_queue::send_to_community_new,
   extensions::context::lemmy_context,
-  fetcher::{
-    objects::get_or_fetch_and_insert_post_or_comment,
-    person::get_or_fetch_and_upsert_person,
-  },
+  fetcher::object_id::ObjectId,
   ActorType,
   PostOrComment,
 };
@@ -61,10 +58,10 @@ impl From<&VoteType> for i16 {
 #[derive(Clone, Debug, Deserialize, Serialize, ActivityFields)]
 #[serde(rename_all = "camelCase")]
 pub struct Vote {
-  actor: Url,
-  to: PublicUrl,
-  pub(in crate::activities::voting) object: Url,
-  cc: [Url; 1],
+  actor: ObjectId<Person>,
+  to: [PublicUrl; 1],
+  pub(in crate::activities::voting) object: ObjectId<PostOrComment>,
+  cc: [ObjectId<Community>; 1],
   #[serde(rename = "type")]
   pub(in crate::activities::voting) kind: VoteType,
   id: Url,
@@ -82,10 +79,10 @@ impl Vote {
     kind: VoteType,
   ) -> Result<Vote, LemmyError> {
     Ok(Vote {
-      actor: actor.actor_id(),
-      to: PublicUrl::Public,
-      object: object.ap_id(),
-      cc: [community.actor_id()],
+      actor: ObjectId::new(actor.actor_id()),
+      to: [PublicUrl::Public],
+      object: ObjectId::new(object.ap_id()),
+      cc: [ObjectId::new(community.actor_id())],
       kind: kind.clone(),
       id: generate_activity_id(kind)?,
       context: lemmy_context(),
@@ -129,9 +126,8 @@ impl ActivityHandler for Vote {
     context: &LemmyContext,
     request_counter: &mut i32,
   ) -> Result<(), LemmyError> {
-    let actor = get_or_fetch_and_upsert_person(&self.actor, context, request_counter).await?;
-    let object =
-      get_or_fetch_and_insert_post_or_comment(&self.object, context, request_counter).await?;
+    let actor = self.actor.dereference(context, request_counter).await?;
+    let object = self.object.dereference(context, request_counter).await?;
     match object {
       PostOrComment::Post(p) => vote_post(&self.kind, actor, p.deref(), context).await,
       PostOrComment::Comment(c) => vote_comment(&self.kind, actor, c.deref(), context).await,