diff --git a/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs b/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs index aab6042dd2..aff1e98cc4 100644 --- a/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs +++ b/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs @@ -62,6 +62,7 @@ pub struct ListMediaFilesArgs<'a> { pub maybe_filter_media_type: Option, pub maybe_offset: Option, pub cursor_is_reversed: bool, + pub sort_ascending: bool, pub view_as: ViewAs, pub mysql_pool: &'a MySqlPool, } @@ -73,6 +74,7 @@ pub async fn list_media_files(args: ListMediaFilesArgs<'_>) -> AnyhowResult( limit: usize, maybe_offset: Option, cursor_is_reversed: bool, + sort_ascending: bool, view_as: ViewAs, ) -> QueryBuilder<'a, MySql> { + let mut sort_ascending = sort_ascending; // NB: Query cannot be statically checked by sqlx let mut query_builder: QueryBuilder = QueryBuilder::new( r#" @@ -192,17 +196,29 @@ WHERE } if let Some(offset) = maybe_offset { - if cursor_is_reversed { - query_builder.push(format!(" AND m.id < {offset} ")); + if sort_ascending { + if cursor_is_reversed { + // NB: We're searching backwards. + query_builder.push(" AND m.id < "); + sort_ascending = !sort_ascending; + } else { + query_builder.push(" AND m.id > "); + } } else { - query_builder.push(format!(" AND m.id > {offset} ")); + if cursor_is_reversed { + // NB: We're searching backwards. + query_builder.push(" AND m.id > "); + sort_ascending = !sort_ascending; + } else { + query_builder.push(" AND m.id < "); + } } + query_builder.push_bind(offset as i64); } - query_builder.push(" GROUP BY m.id"); - if cursor_is_reversed { + if sort_ascending { query_builder.push(" ORDER BY m.id ASC "); } else { query_builder.push(" ORDER BY m.id DESC "); diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs index af61ace678..d9669bd7c3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs @@ -152,6 +152,7 @@ pub async fn list_media_files_handler( maybe_filter_media_type: query.filter_media_type, maybe_offset: cursor, cursor_is_reversed, + sort_ascending, view_as, mysql_pool: &server_state.mysql_pool, }).await;