fix: diary sort_by rating_desc/rating_asc in all/movie queries
This commit is contained in:
@@ -111,8 +111,10 @@ impl PostgresRepository {
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
) -> Result<Vec<DiaryRow>, DomainError> {
|
) -> Result<Vec<DiaryRow>, DomainError> {
|
||||||
let order = match sort {
|
let order = match sort {
|
||||||
|
SortDirection::ByRatingDesc => "r.rating DESC, r.watched_at DESC",
|
||||||
|
SortDirection::ByRatingAsc => "r.rating ASC, r.watched_at ASC",
|
||||||
SortDirection::Ascending => "r.watched_at ASC",
|
SortDirection::Ascending => "r.watched_at ASC",
|
||||||
_ => "r.watched_at DESC",
|
SortDirection::Descending => "r.watched_at DESC",
|
||||||
};
|
};
|
||||||
let sql = format!(
|
let sql = format!(
|
||||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
||||||
@@ -142,8 +144,10 @@ impl PostgresRepository {
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
) -> Result<Vec<DiaryRow>, DomainError> {
|
) -> Result<Vec<DiaryRow>, DomainError> {
|
||||||
let order = match sort {
|
let order = match sort {
|
||||||
|
SortDirection::ByRatingDesc => "r.rating DESC, r.watched_at DESC",
|
||||||
|
SortDirection::ByRatingAsc => "r.rating ASC, r.watched_at ASC",
|
||||||
SortDirection::Ascending => "r.watched_at ASC",
|
SortDirection::Ascending => "r.watched_at ASC",
|
||||||
_ => "r.watched_at DESC",
|
SortDirection::Descending => "r.watched_at DESC",
|
||||||
};
|
};
|
||||||
let sql = format!(
|
let sql = format!(
|
||||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
||||||
|
|||||||
@@ -110,38 +110,27 @@ impl SqliteMovieRepository {
|
|||||||
limit: i64,
|
limit: i64,
|
||||||
offset: i64,
|
offset: i64,
|
||||||
) -> Result<Vec<DiaryRow>, DomainError> {
|
) -> Result<Vec<DiaryRow>, DomainError> {
|
||||||
match sort {
|
let order_clause = match sort {
|
||||||
// ByRatingDesc/ByRatingAsc only apply to user-scoped queries; fall back to date sort here
|
SortDirection::ByRatingDesc => "r.rating DESC, r.watched_at DESC",
|
||||||
SortDirection::Descending | SortDirection::ByRatingDesc | SortDirection::ByRatingAsc => sqlx::query_as!(
|
SortDirection::ByRatingAsc => "r.rating ASC, r.watched_at ASC",
|
||||||
DiaryRow,
|
SortDirection::Ascending => "r.watched_at ASC",
|
||||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
SortDirection::Descending => "r.watched_at DESC",
|
||||||
r.id AS review_id, r.movie_id, r.user_id, r.rating, r.comment, r.watched_at, r.created_at, r.remote_actor_url
|
};
|
||||||
FROM reviews r
|
let sql = format!(
|
||||||
INNER JOIN movies m ON m.id = r.movie_id
|
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
||||||
ORDER BY r.watched_at DESC
|
r.id AS review_id, r.movie_id, r.user_id, r.rating, r.comment, r.watched_at, r.created_at, r.remote_actor_url
|
||||||
LIMIT ? OFFSET ?",
|
FROM reviews r
|
||||||
limit,
|
INNER JOIN movies m ON m.id = r.movie_id
|
||||||
offset
|
ORDER BY {}
|
||||||
)
|
LIMIT ? OFFSET ?",
|
||||||
|
order_clause
|
||||||
|
);
|
||||||
|
sqlx::query_as::<_, DiaryRow>(&sql)
|
||||||
|
.bind(limit)
|
||||||
|
.bind(offset)
|
||||||
.fetch_all(&self.pool)
|
.fetch_all(&self.pool)
|
||||||
.await
|
.await
|
||||||
.map_err(Self::map_err),
|
.map_err(Self::map_err)
|
||||||
|
|
||||||
SortDirection::Ascending => sqlx::query_as!(
|
|
||||||
DiaryRow,
|
|
||||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
|
||||||
r.id AS review_id, r.movie_id, r.user_id, r.rating, r.comment, r.watched_at, r.created_at, r.remote_actor_url
|
|
||||||
FROM reviews r
|
|
||||||
INNER JOIN movies m ON m.id = r.movie_id
|
|
||||||
ORDER BY r.watched_at ASC
|
|
||||||
LIMIT ? OFFSET ?",
|
|
||||||
limit,
|
|
||||||
offset
|
|
||||||
)
|
|
||||||
.fetch_all(&self.pool)
|
|
||||||
.await
|
|
||||||
.map_err(Self::map_err),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn fetch_movie_diary_rows(
|
async fn fetch_movie_diary_rows(
|
||||||
@@ -151,42 +140,29 @@ impl SqliteMovieRepository {
|
|||||||
limit: i64,
|
limit: i64,
|
||||||
offset: i64,
|
offset: i64,
|
||||||
) -> Result<Vec<DiaryRow>, DomainError> {
|
) -> Result<Vec<DiaryRow>, DomainError> {
|
||||||
match sort {
|
let order_clause = match sort {
|
||||||
// ByRatingDesc/ByRatingAsc only apply to user-scoped queries; fall back to date sort here
|
SortDirection::ByRatingDesc => "r.rating DESC, r.watched_at DESC",
|
||||||
SortDirection::Descending | SortDirection::ByRatingDesc | SortDirection::ByRatingAsc => sqlx::query_as!(
|
SortDirection::ByRatingAsc => "r.rating ASC, r.watched_at ASC",
|
||||||
DiaryRow,
|
SortDirection::Ascending => "r.watched_at ASC",
|
||||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
SortDirection::Descending => "r.watched_at DESC",
|
||||||
r.id AS review_id, r.movie_id, r.user_id, r.rating, r.comment, r.watched_at, r.created_at, r.remote_actor_url
|
};
|
||||||
FROM reviews r
|
let sql = format!(
|
||||||
INNER JOIN movies m ON m.id = r.movie_id
|
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
||||||
WHERE r.movie_id = ?
|
r.id AS review_id, r.movie_id, r.user_id, r.rating, r.comment, r.watched_at, r.created_at, r.remote_actor_url
|
||||||
ORDER BY r.watched_at DESC
|
FROM reviews r
|
||||||
LIMIT ? OFFSET ?",
|
INNER JOIN movies m ON m.id = r.movie_id
|
||||||
movie_id,
|
WHERE r.movie_id = ?
|
||||||
limit,
|
ORDER BY {}
|
||||||
offset
|
LIMIT ? OFFSET ?",
|
||||||
)
|
order_clause
|
||||||
|
);
|
||||||
|
sqlx::query_as::<_, DiaryRow>(&sql)
|
||||||
|
.bind(movie_id)
|
||||||
|
.bind(limit)
|
||||||
|
.bind(offset)
|
||||||
.fetch_all(&self.pool)
|
.fetch_all(&self.pool)
|
||||||
.await
|
.await
|
||||||
.map_err(Self::map_err),
|
.map_err(Self::map_err)
|
||||||
|
|
||||||
SortDirection::Ascending => sqlx::query_as!(
|
|
||||||
DiaryRow,
|
|
||||||
"SELECT m.id, m.external_metadata_id, m.title, m.release_year, m.director, m.poster_path,
|
|
||||||
r.id AS review_id, r.movie_id, r.user_id, r.rating, r.comment, r.watched_at, r.created_at, r.remote_actor_url
|
|
||||||
FROM reviews r
|
|
||||||
INNER JOIN movies m ON m.id = r.movie_id
|
|
||||||
WHERE r.movie_id = ?
|
|
||||||
ORDER BY r.watched_at ASC
|
|
||||||
LIMIT ? OFFSET ?",
|
|
||||||
movie_id,
|
|
||||||
limit,
|
|
||||||
offset
|
|
||||||
)
|
|
||||||
.fetch_all(&self.pool)
|
|
||||||
.await
|
|
||||||
.map_err(Self::map_err),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn count_user_diary_entries(
|
async fn count_user_diary_entries(
|
||||||
|
|||||||
Reference in New Issue
Block a user