fix: clippy too-many-args on update_remote_review, use RemoteReviewUpdate struct

This commit is contained in:
2026-07-10 00:41:51 +02:00
parent cde2f5aaae
commit 081a20ae31
5 changed files with 43 additions and 60 deletions

View File

@@ -22,7 +22,7 @@ pub use k_ap::{
pub use event_handler::ActivityPubEventHandler; pub use event_handler::ActivityPubEventHandler;
pub use port::{ActivityPubPort, NoopActivityPubService}; pub use port::{ActivityPubPort, NoopActivityPubService};
pub use remote_review_repository::RemoteReviewRepository; pub use remote_review_repository::{RemoteReviewRepository, RemoteReviewUpdate};
pub use review_handler::ReviewObjectHandler; pub use review_handler::ReviewObjectHandler;
pub use user_adapter::DomainUserRepoAdapter; pub use user_adapter::DomainUserRepoAdapter;

View File

@@ -3,6 +3,16 @@ use async_trait::async_trait;
use chrono::NaiveDateTime; use chrono::NaiveDateTime;
use domain::models::Review; use domain::models::Review;
pub struct RemoteReviewUpdate<'a> {
pub ap_id: &'a str,
pub actor_url: &'a str,
pub rating: u8,
pub comment: Option<&'a str>,
pub watched_at: NaiveDateTime,
pub poster_url: Option<&'a str>,
pub watch_medium: Option<&'a str>,
}
#[async_trait] #[async_trait]
pub trait RemoteReviewRepository: Send + Sync { pub trait RemoteReviewRepository: Send + Sync {
async fn save_remote_review( async fn save_remote_review(
@@ -17,16 +27,7 @@ pub trait RemoteReviewRepository: Send + Sync {
async fn delete_remote_review(&self, ap_id: &str, actor_url: &str) -> Result<()>; async fn delete_remote_review(&self, ap_id: &str, actor_url: &str) -> Result<()>;
async fn update_remote_review( async fn update_remote_review(&self, update: RemoteReviewUpdate<'_>) -> Result<()>;
&self,
ap_id: &str,
actor_url: &str,
rating: u8,
comment: Option<&str>,
watched_at: NaiveDateTime,
poster_url: Option<&str>,
watch_medium: Option<&str>,
) -> Result<()>;
async fn delete_by_actor(&self, actor_url: &str) -> Result<()>; async fn delete_by_actor(&self, actor_url: &str) -> Result<()>;
} }

View File

@@ -188,15 +188,15 @@ impl ApObjectHandler for ReviewObjectHandler {
} }
self.review_store self.review_store
.update_remote_review( .update_remote_review(crate::remote_review_repository::RemoteReviewUpdate {
ap_id.as_str(), ap_id: ap_id.as_str(),
actor_url.as_str(), actor_url: actor_url.as_str(),
obj.rating.min(5), rating: obj.rating.min(5),
obj.comment.as_deref(), comment: obj.comment.as_deref(),
obj.watched_at.naive_utc(), watched_at: obj.watched_at.naive_utc(),
obj.poster_url.as_deref(), poster_url: obj.poster_url.as_deref(),
obj.watch_medium.as_deref(), watch_medium: obj.watch_medium.as_deref(),
) })
.await?; .await?;
Ok(()) Ok(())

View File

@@ -1,4 +1,4 @@
use activitypub::RemoteReviewRepository; use activitypub::{RemoteReviewRepository, RemoteReviewUpdate};
use anyhow::{Result, anyhow}; use anyhow::{Result, anyhow};
use async_trait::async_trait; use async_trait::async_trait;
use domain::models::{Review, ReviewSource}; use domain::models::{Review, ReviewSource};
@@ -71,37 +71,28 @@ impl RemoteReviewRepository for PostgresFederationRepository {
Ok(()) Ok(())
} }
async fn update_remote_review( async fn update_remote_review(&self, u: RemoteReviewUpdate<'_>) -> Result<()> {
&self, let watched_at_str = datetime_to_str(&u.watched_at);
ap_id: &str,
actor_url: &str,
rating: u8,
comment: Option<&str>,
watched_at: chrono::NaiveDateTime,
poster_url: Option<&str>,
watch_medium: Option<&str>,
) -> Result<()> {
let watched_at_str = datetime_to_str(&watched_at);
sqlx::query( sqlx::query(
"UPDATE reviews SET rating = $1, comment = $2, watched_at = $3::timestamptz, watch_medium = $4 "UPDATE reviews SET rating = $1, comment = $2, watched_at = $3::timestamptz, watch_medium = $4
WHERE ap_id = $5 AND remote_actor_url = $6", WHERE ap_id = $5 AND remote_actor_url = $6",
) )
.bind(rating as i64) .bind(u.rating as i64)
.bind(comment) .bind(u.comment)
.bind(&watched_at_str) .bind(&watched_at_str)
.bind(watch_medium) .bind(u.watch_medium)
.bind(ap_id) .bind(u.ap_id)
.bind(actor_url) .bind(u.actor_url)
.execute(&self.pool) .execute(&self.pool)
.await?; .await?;
if let Some(url) = poster_url { if let Some(url) = u.poster_url {
sqlx::query( sqlx::query(
"UPDATE movies SET poster_path = $1 "UPDATE movies SET poster_path = $1
WHERE id = (SELECT movie_id FROM reviews WHERE ap_id = $2 AND remote_actor_url = $3)", WHERE id = (SELECT movie_id FROM reviews WHERE ap_id = $2 AND remote_actor_url = $3)",
) )
.bind(url) .bind(url)
.bind(ap_id) .bind(u.ap_id)
.bind(actor_url) .bind(u.actor_url)
.execute(&self.pool) .execute(&self.pool)
.await?; .await?;
} }

View File

@@ -1,4 +1,4 @@
use activitypub::RemoteReviewRepository; use activitypub::{RemoteReviewRepository, RemoteReviewUpdate};
use anyhow::{Result, anyhow}; use anyhow::{Result, anyhow};
use async_trait::async_trait; use async_trait::async_trait;
use domain::models::{Review, ReviewSource}; use domain::models::{Review, ReviewSource};
@@ -71,37 +71,28 @@ impl RemoteReviewRepository for SqliteFederationRepository {
Ok(()) Ok(())
} }
async fn update_remote_review( async fn update_remote_review(&self, u: RemoteReviewUpdate<'_>) -> Result<()> {
&self, let watched_at_str = datetime_to_str(&u.watched_at);
ap_id: &str,
actor_url: &str,
rating: u8,
comment: Option<&str>,
watched_at: chrono::NaiveDateTime,
poster_url: Option<&str>,
watch_medium: Option<&str>,
) -> Result<()> {
let watched_at_str = datetime_to_str(&watched_at);
sqlx::query( sqlx::query(
"UPDATE reviews SET rating = ?, comment = ?, watched_at = ?, watch_medium = ? "UPDATE reviews SET rating = ?, comment = ?, watched_at = ?, watch_medium = ?
WHERE ap_id = ? AND remote_actor_url = ?", WHERE ap_id = ? AND remote_actor_url = ?",
) )
.bind(rating as i64) .bind(u.rating as i64)
.bind(comment) .bind(u.comment)
.bind(&watched_at_str) .bind(&watched_at_str)
.bind(watch_medium) .bind(u.watch_medium)
.bind(ap_id) .bind(u.ap_id)
.bind(actor_url) .bind(u.actor_url)
.execute(&self.pool) .execute(&self.pool)
.await?; .await?;
if let Some(url) = poster_url { if let Some(url) = u.poster_url {
sqlx::query( sqlx::query(
"UPDATE movies SET poster_path = ? "UPDATE movies SET poster_path = ?
WHERE id = (SELECT movie_id FROM reviews WHERE ap_id = ? AND remote_actor_url = ?)", WHERE id = (SELECT movie_id FROM reviews WHERE ap_id = ? AND remote_actor_url = ?)",
) )
.bind(url) .bind(url)
.bind(ap_id) .bind(u.ap_id)
.bind(actor_url) .bind(u.actor_url)
.execute(&self.pool) .execute(&self.pool)
.await?; .await?;
} }