show accurate page counts and buttons for quote search results

This commit is contained in:
2026-04-26 23:58:19 +02:00
parent efb6226421
commit 914d8a48c1
2 changed files with 16 additions and 1 deletions

View File

@@ -174,6 +174,18 @@ impl Quote {
Ok(quotes) Ok(quotes)
} }
pub async fn search_query_count(
conn: &mut PgConnection,
query: &str,
) -> Result<i64, QuoteError> {
let count: i64 =
sqlx::query_scalar("SELECT COUNT(*) FROM quotes WHERE fts ILIKE '%' || $1 || '%'")
.bind(query)
.fetch_one(&mut *conn)
.await?;
Ok(count)
}
pub async fn get_by_search_query( pub async fn get_by_search_query(
conn: &mut PgConnection, conn: &mut PgConnection,
query: &str, query: &str,

View File

@@ -45,7 +45,10 @@ pub async fn page(
"" => Quote::get_chronological_offset(&mut *conn, offset, per_page).await?, "" => Quote::get_chronological_offset(&mut *conn, offset, per_page).await?,
_ => Quote::get_by_search_query(&mut *conn, search, offset, per_page).await?, _ => Quote::get_by_search_query(&mut *conn, search, offset, per_page).await?,
}; };
let total_quotes = Quote::total_count(&mut *conn).await?; let total_quotes = match search {
"" => Quote::total_count(&mut *conn).await?,
_ => Quote::search_query_count(&mut *conn, search).await?,
};
let total_pages = (total_quotes as f64 / per_page as f64).ceil() as i64; let total_pages = (total_quotes as f64 / per_page as f64).ceil() as i64;
let s_qs = if search.is_empty() { let s_qs = if search.is_empty() {