diff options
Diffstat (limited to 'crates/sellershut/src')
-rw-r--r-- | crates/sellershut/src/entity/user.rs | 3 | ||||
-rw-r--r-- | crates/sellershut/src/main.rs | 7 | ||||
-rw-r--r-- | crates/sellershut/src/server/activities/follow.rs | 26 |
3 files changed, 30 insertions, 6 deletions
diff --git a/crates/sellershut/src/entity/user.rs b/crates/sellershut/src/entity/user.rs index b420682..2d09acc 100644 --- a/crates/sellershut/src/entity/user.rs +++ b/crates/sellershut/src/entity/user.rs @@ -14,8 +14,8 @@ use activitypub_federation::{ }; use async_trait::async_trait; use serde::{Deserialize, Serialize}; -use sqlx::types::time::OffsetDateTime; use stack_up::{Environment, Services}; +use time::OffsetDateTime; use tracing::trace; use url::Url; use uuid::Uuid; @@ -180,6 +180,7 @@ impl User { A: Activity + Serialize + std::fmt::Debug + Send + Sync, <A as Activity>::Error: From<anyhow::Error> + From<serde_json::Error>, { + trace!("sending accept activity"); let activity = WithContext::new_default(activity); // Send through queue in some cases and bypass it in others to test both code paths if use_queue { diff --git a/crates/sellershut/src/main.rs b/crates/sellershut/src/main.rs index f0540bf..b51c9f0 100644 --- a/crates/sellershut/src/main.rs +++ b/crates/sellershut/src/main.rs @@ -10,7 +10,7 @@ use clap::Parser; use stack_up::{Configuration, Services, tracing::Tracing}; use crate::{error::AppError, state::AppState}; -use tracing::{error, info}; +use tracing::{error, info, trace}; /// sellershut #[derive(Parser, Debug)] @@ -45,6 +45,11 @@ async fn main() -> Result<(), AppError> { .inspect_err(|e| error!("database: {e}"))? .build(); + trace!("running migrations"); + sqlx::migrate!("./migrations") + .run(&services.postgres) + .await?; + let state = AppState::create(services, &config).await?; let addr = SocketAddr::from((Ipv6Addr::UNSPECIFIED, config.application.port)); diff --git a/crates/sellershut/src/server/activities/follow.rs b/crates/sellershut/src/server/activities/follow.rs index e39b81e..48d9caa 100644 --- a/crates/sellershut/src/server/activities/follow.rs +++ b/crates/sellershut/src/server/activities/follow.rs @@ -6,6 +6,7 @@ use activitypub_federation::{ }; use async_trait::async_trait; use serde::{Deserialize, Serialize}; +use tracing::trace; use url::Url; use uuid::Uuid; @@ -71,21 +72,38 @@ impl Activity for Follow { async fn receive(self, data: &Data<Self::DataType>) -> Result<(), Self::Error> { let id = Uuid::now_v7(); - sqlx::query!("insert into following (id, follower, followee) values ($1, $2, $3) on conflict (follower, followee) do nothing" - ,id, + let mut transaction = data.services.postgres.begin().await?; + + trace!("adding a follower"); + sqlx::query!( + "insert into following (id, follower, followee) values ($1, $2, $3)", + id, self.actor.inner().as_str(), self.object.inner().as_str(), - ).execute(&data.services.postgres).await?; + ) + .execute(&mut *transaction) + .await?; let follower = self.actor.dereference(data).await?; let id = generate_object_id(data.domain(), data.environment)?; let local_user = self.object.dereference(data).await?; - let accept = Accept::new(self.object.clone(), self, id.clone()); + let accept = Accept::new(self.object.clone(), self.clone(), id.clone()); local_user .send(accept, vec![follower.shared_inbox_or_inbox()], false, data) .await?; + + sqlx::query!( + "insert into activity (ap_id, activity) values ($1, $2)", + self.actor.inner().as_str(), + sqlx::types::Json(&self) as _ + ) + .execute(&mut *transaction) + .await?; + + transaction.commit().await?; + Ok(()) } } |