feat: user tombstone and retired usernames
This commit is contained in:
@@ -131,11 +131,16 @@ impl DiaryQuery for SqliteDiaryRepository {
|
||||
FeedSortBy::RatingAsc => "r.rating ASC, r.watched_at ASC",
|
||||
};
|
||||
|
||||
// Tombstoned local authors vanish from the feed; remote and orphan
|
||||
// rows have no `users` match, so `deleted_at` is NULL for them.
|
||||
where_parts.push("u.deleted_at IS NULL".to_string());
|
||||
|
||||
let where_clause = where_parts.join(" AND ");
|
||||
|
||||
let count_sql = format!(
|
||||
"SELECT COUNT(*) FROM reviews r
|
||||
INNER JOIN movies m ON m.id = r.movie_id
|
||||
LEFT JOIN users u ON u.id = r.user_id
|
||||
WHERE {}",
|
||||
where_clause
|
||||
);
|
||||
@@ -304,12 +309,14 @@ impl DiaryQuery for SqliteDiaryRepository {
|
||||
let limit = page.limit as i64;
|
||||
let offset = page.offset as i64;
|
||||
|
||||
let total: i64 =
|
||||
sqlx::query_scalar::<_, i64>("SELECT COUNT(*) FROM reviews WHERE movie_id = ?")
|
||||
.bind(&id_str)
|
||||
.fetch_one(&self.pool)
|
||||
.await
|
||||
.map_err(crate::shared::map_sqlx_error)?;
|
||||
let total: i64 = sqlx::query_scalar::<_, i64>(
|
||||
"SELECT COUNT(*) FROM reviews r LEFT JOIN users u ON u.id = r.user_id
|
||||
WHERE r.movie_id = ? AND u.deleted_at IS NULL",
|
||||
)
|
||||
.bind(&id_str)
|
||||
.fetch_one(&self.pool)
|
||||
.await
|
||||
.map_err(crate::shared::map_sqlx_error)?;
|
||||
|
||||
let rows = sqlx::query_as::<_, FeedRow>(
|
||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
||||
@@ -321,7 +328,7 @@ impl DiaryQuery for SqliteDiaryRepository {
|
||||
INNER JOIN movies m ON m.id = r.movie_id
|
||||
LEFT JOIN users u ON u.id = r.user_id
|
||||
LEFT JOIN ap_remote_actors a ON a.url = r.remote_actor_url
|
||||
WHERE r.movie_id = ?
|
||||
WHERE r.movie_id = ? AND u.deleted_at IS NULL
|
||||
ORDER BY r.watched_at DESC
|
||||
LIMIT ? OFFSET ?",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user