Skip to content

Commit

Permalink
🐛 Fix invalid SQL for library stats query (#401)
Browse files Browse the repository at this point in the history
This was missed before the historical read history feature was merged, the SQL referenced a now non-existent table
  • Loading branch information
aaronleopold authored Aug 18, 2024
1 parent 862ff63 commit 362e85f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 41 deletions.
53 changes: 13 additions & 40 deletions apps/server/src/routers/api/v1/library.rs
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,6 @@ pub struct LibraryStatsParams {
all_users: bool,
}

// TODO(historical-read-session): refactor query
#[utoipa::path(
get,
path = "/api/v1/libraries/stats",
Expand Down Expand Up @@ -331,27 +330,13 @@ async fn get_libraries_stats(
),
progress_counts AS (
SELECT
IFNULL(SUM(
CASE WHEN rp.is_completed THEN
1
ELSE
0
END),
0) AS completed_books,
IFNULL(SUM(
CASE WHEN rp.is_completed THEN
0
ELSE
1
END),
0) AS in_progress_books
COUNT(frs.id) AS completed_books,
COUNT(rs.id) AS in_progress_books
FROM
media m
INNER JOIN read_progresses rp ON rp.media_id = m.id
WHERE
rp.is_completed AND (
{} IS TRUE OR rp.user_id = {}
)
LEFT JOIN finished_reading_sessions frs ON frs.media_id = m.id
LEFT JOIN reading_sessions rs ON rs.media_id = m.id
WHERE {} IS TRUE OR (rs.user_id = {} OR frs.user_id = {})
)
SELECT
*
Expand All @@ -360,6 +345,7 @@ async fn get_libraries_stats(
INNER JOIN progress_counts;
"#,
PrismaValue::Boolean(params.all_users),
PrismaValue::String(user.id.clone()),
PrismaValue::String(user.id)
))
.exec()
Expand Down Expand Up @@ -1673,27 +1659,13 @@ async fn get_library_stats(
),
progress_counts AS (
SELECT
IFNULL(SUM(
CASE WHEN rp.is_completed THEN
1
ELSE
0
END),
0) AS completed_books,
IFNULL(SUM(
CASE WHEN rp.is_completed THEN
0
ELSE
1
END),
0) AS in_progress_books
COUNT(frs.id) AS completed_books,
COUNT(rs.id) AS in_progress_books
FROM
media m
INNER JOIN read_progresses rp ON rp.media_id = m.id
WHERE
rp.is_completed AND (
{} IS TRUE OR rp.user_id = {}
)
LEFT JOIN finished_reading_sessions frs ON frs.media_id = m.id
LEFT JOIN reading_sessions rs ON rs.media_id = m.id
WHERE {} IS TRUE OR (rs.user_id = {} OR frs.user_id = {})
)
SELECT
*
Expand All @@ -1703,14 +1675,15 @@ async fn get_library_stats(
"#,
PrismaValue::String(id),
PrismaValue::Boolean(params.all_users),
PrismaValue::String(user.id.clone()),
PrismaValue::String(user.id)
))
.exec()
.await?
.into_iter()
.next()
.ok_or(APIError::InternalServerError(
"Failed to compute stats for libraries".to_string(),
"Failed to compute stats for library".to_string(),
))?;

Ok(Json(stats))
Expand Down
1 change: 0 additions & 1 deletion packages/browser/src/scenes/book/BookOverviewScene.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ export default function BookOverviewScene() {
)
}

// TODO(historical-read-session): double check default order
const completedAt = sortBy(media.finished_reading_sessions, ({ completed_at }) =>
dayjs(completed_at).toDate(),
).at(-1)?.completed_at
Expand Down

0 comments on commit 362e85f

Please sign in to comment.