hyaenidae/profiles/src/apub/actions/follow_request.rs
2021-01-04 11:41:34 -06:00

99 lines
2.5 KiB
Rust

use crate::{
apub::actions::{
AcceptFollowRequest, CreateFollowRequest, DeleteFollowRequest, RejectFollowRequest,
},
Action, Context, Error,
};
impl Action for CreateFollowRequest {
fn perform(&self, context: &Context) -> Result<(), Error> {
let follow_request = context.store.view.follow_requests.new(
self.followed_profile,
self.followed_by_profile,
self.published,
)?;
context
.apub
.follow_request(&self.apub_id, follow_request.id)?;
if let Ok(Some(true)) = context.store.profiles.is_local(self.followed_profile) {
context.store.view.follow_request_notifs.new(
self.followed_profile,
follow_request.id,
self.published,
);
}
Ok(())
}
}
impl Action for AcceptFollowRequest {
fn perform(&self, context: &Context) -> Result<(), Error> {
let opt = context
.store
.view
.follow_requests
.remove(self.follow_request_id)?;
if let Some(undo_follow_request) = opt {
context
.store
.view
.follow_request_notifs
.remove(undo_follow_request.0.id);
let follow = context.store.view.follows.new(
undo_follow_request.0.left,
undo_follow_request.0.right,
self.published,
)?;
context.apub.follow(&self.apub_id, follow.id)?;
}
Ok(())
}
}
impl Action for RejectFollowRequest {
fn perform(&self, context: &Context) -> Result<(), Error> {
let opt = context
.store
.view
.follow_requests
.remove(self.follow_request_id)?;
if let Some(undo_follow_request) = opt {
context
.store
.view
.follow_request_notifs
.remove(undo_follow_request.0.id);
}
Ok(())
}
}
impl Action for DeleteFollowRequest {
fn perform(&self, context: &Context) -> Result<(), Error> {
let opt = context
.store
.view
.follow_requests
.remove(self.follow_request_id)?;
if let Some(undo_follow_request) = opt {
context
.store
.view
.follow_request_notifs
.remove(undo_follow_request.0.id);
}
Ok(())
}
}