diff --git a/apps/labrinth/.sqlx/query-29e171bd746ac5dc1fabae4c9f81c3d1df4e69c860b7d0f6a907377664199217.json b/apps/labrinth/.sqlx/query-1aea0d5e6936b043cb7727b779d60598aa812c8ef0f5895fa740859321092a1c.json similarity index 73% rename from apps/labrinth/.sqlx/query-29e171bd746ac5dc1fabae4c9f81c3d1df4e69c860b7d0f6a907377664199217.json rename to apps/labrinth/.sqlx/query-1aea0d5e6936b043cb7727b779d60598aa812c8ef0f5895fa740859321092a1c.json index 75f3f2d9fd..f15925ae39 100644 --- a/apps/labrinth/.sqlx/query-29e171bd746ac5dc1fabae4c9f81c3d1df4e69c860b7d0f6a907377664199217.json +++ b/apps/labrinth/.sqlx/query-1aea0d5e6936b043cb7727b779d60598aa812c8ef0f5895fa740859321092a1c.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT id FROM reports\n WHERE closed = FALSE\n ORDER BY created ASC\n LIMIT $1;\n ", + "query": "\n SELECT id FROM reports\n WHERE closed = FALSE\n ORDER BY created ASC\n OFFSET $2\n LIMIT $1\n ", "describe": { "columns": [ { @@ -11,6 +11,7 @@ ], "parameters": { "Left": [ + "Int8", "Int8" ] }, @@ -18,5 +19,5 @@ false ] }, - "hash": "29e171bd746ac5dc1fabae4c9f81c3d1df4e69c860b7d0f6a907377664199217" + "hash": "1aea0d5e6936b043cb7727b779d60598aa812c8ef0f5895fa740859321092a1c" } diff --git a/apps/labrinth/.sqlx/query-f17a109913015a7a5ab847bb2e73794d6261a08d450de24b450222755e520881.json b/apps/labrinth/.sqlx/query-be8a5dd2b71fdc279a6fa68fe5384da31afd91d4b480527e2dd8402aef36f12c.json similarity index 71% rename from apps/labrinth/.sqlx/query-f17a109913015a7a5ab847bb2e73794d6261a08d450de24b450222755e520881.json rename to apps/labrinth/.sqlx/query-be8a5dd2b71fdc279a6fa68fe5384da31afd91d4b480527e2dd8402aef36f12c.json index 40600b2f73..c5157ca792 100644 --- a/apps/labrinth/.sqlx/query-f17a109913015a7a5ab847bb2e73794d6261a08d450de24b450222755e520881.json +++ b/apps/labrinth/.sqlx/query-be8a5dd2b71fdc279a6fa68fe5384da31afd91d4b480527e2dd8402aef36f12c.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT id FROM reports\n WHERE closed = FALSE AND reporter = $1\n ORDER BY created ASC\n LIMIT $2;\n ", + "query": "\n SELECT id FROM reports\n WHERE closed = FALSE AND reporter = $1\n ORDER BY created ASC\n OFFSET $3\n LIMIT $2\n ", "describe": { "columns": [ { @@ -11,6 +11,7 @@ ], "parameters": { "Left": [ + "Int8", "Int8", "Int8" ] @@ -19,5 +20,5 @@ false ] }, - "hash": "f17a109913015a7a5ab847bb2e73794d6261a08d450de24b450222755e520881" + "hash": "be8a5dd2b71fdc279a6fa68fe5384da31afd91d4b480527e2dd8402aef36f12c" } diff --git a/apps/labrinth/.sqlx/query-3baabc9f08401801fa290866888c540746fc50c1d79911f08f3322b605ce5c30.json b/apps/labrinth/.sqlx/query-ccb0315ff52ea4402f53508334a7288fc9f8e77ffd7bce665441ff682384cbf9.json similarity index 66% rename from apps/labrinth/.sqlx/query-3baabc9f08401801fa290866888c540746fc50c1d79911f08f3322b605ce5c30.json rename to apps/labrinth/.sqlx/query-ccb0315ff52ea4402f53508334a7288fc9f8e77ffd7bce665441ff682384cbf9.json index 5aef008000..81d4a51df8 100644 --- a/apps/labrinth/.sqlx/query-3baabc9f08401801fa290866888c540746fc50c1d79911f08f3322b605ce5c30.json +++ b/apps/labrinth/.sqlx/query-ccb0315ff52ea4402f53508334a7288fc9f8e77ffd7bce665441ff682384cbf9.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT id FROM mods\n WHERE status = $1\n ORDER BY queued ASC\n LIMIT $2;\n ", + "query": "\n SELECT id FROM mods\n WHERE status = $1\n ORDER BY queued ASC\n OFFSET $3\n LIMIT $2\n ", "describe": { "columns": [ { @@ -12,6 +12,7 @@ "parameters": { "Left": [ "Text", + "Int8", "Int8" ] }, @@ -19,5 +20,5 @@ false ] }, - "hash": "3baabc9f08401801fa290866888c540746fc50c1d79911f08f3322b605ce5c30" + "hash": "ccb0315ff52ea4402f53508334a7288fc9f8e77ffd7bce665441ff682384cbf9" } diff --git a/apps/labrinth/migrations/20250725230041_reports-closed-status-index.sql b/apps/labrinth/migrations/20250725230041_reports-closed-status-index.sql new file mode 100644 index 0000000000..5a3b584616 --- /dev/null +++ b/apps/labrinth/migrations/20250725230041_reports-closed-status-index.sql @@ -0,0 +1 @@ +CREATE INDEX reports_closed ON reports (closed); diff --git a/apps/labrinth/src/routes/internal/moderation.rs b/apps/labrinth/src/routes/internal/moderation.rs index 797d113348..ff28901f24 100644 --- a/apps/labrinth/src/routes/internal/moderation.rs +++ b/apps/labrinth/src/routes/internal/moderation.rs @@ -18,12 +18,14 @@ pub fn config(cfg: &mut web::ServiceConfig) { } #[derive(Deserialize)] -pub struct ResultCount { +pub struct ProjectsRequestOptions { #[serde(default = "default_count")] - pub count: i16, + pub count: u16, + #[serde(default)] + pub offset: u32, } -fn default_count() -> i16 { +fn default_count() -> u16 { 100 } @@ -31,7 +33,7 @@ pub async fn get_projects( req: HttpRequest, pool: web::Data, redis: web::Data, - count: web::Query, + request_opts: web::Query, session_queue: web::Data, ) -> Result { check_is_moderator_from_headers( @@ -50,10 +52,12 @@ pub async fn get_projects( SELECT id FROM mods WHERE status = $1 ORDER BY queued ASC - LIMIT $2; + OFFSET $3 + LIMIT $2 ", ProjectStatus::Processing.as_str(), - count.count as i64 + request_opts.count as i64, + request_opts.offset as i64 ) .fetch(&**pool) .map_ok(|m| database::models::DBProjectId(m.id)) diff --git a/apps/labrinth/src/routes/v2/moderation.rs b/apps/labrinth/src/routes/v2/moderation.rs index 7b5240c127..ff721e6cb9 100644 --- a/apps/labrinth/src/routes/v2/moderation.rs +++ b/apps/labrinth/src/routes/v2/moderation.rs @@ -15,10 +15,10 @@ pub fn config(cfg: &mut web::ServiceConfig) { #[derive(Deserialize)] pub struct ResultCount { #[serde(default = "default_count")] - pub count: i16, + pub count: u16, } -fn default_count() -> i16 { +fn default_count() -> u16 { 100 } @@ -34,7 +34,10 @@ pub async fn get_projects( req, pool.clone(), redis.clone(), - web::Query(internal::moderation::ResultCount { count: count.count }), + web::Query(internal::moderation::ProjectsRequestOptions { + count: count.count, + offset: 0, + }), session_queue, ) .await diff --git a/apps/labrinth/src/routes/v2/reports.rs b/apps/labrinth/src/routes/v2/reports.rs index 2f09ed3c18..8804c47a2d 100644 --- a/apps/labrinth/src/routes/v2/reports.rs +++ b/apps/labrinth/src/routes/v2/reports.rs @@ -43,12 +43,12 @@ pub async fn report_create( #[derive(Deserialize)] pub struct ReportsRequestOptions { #[serde(default = "default_count")] - count: i16, + count: u16, #[serde(default = "default_all")] all: bool, } -fn default_count() -> i16 { +fn default_count() -> u16 { 100 } fn default_all() -> bool { @@ -60,7 +60,7 @@ pub async fn reports( req: HttpRequest, pool: web::Data, redis: web::Data, - count: web::Query, + request_opts: web::Query, session_queue: web::Data, ) -> Result { let response = v3::reports::reports( @@ -68,8 +68,9 @@ pub async fn reports( pool, redis, web::Query(v3::reports::ReportsRequestOptions { - count: count.count, - all: count.all, + count: request_opts.count, + offset: 0, + all: request_opts.all, }), session_queue, ) diff --git a/apps/labrinth/src/routes/v3/reports.rs b/apps/labrinth/src/routes/v3/reports.rs index 8708054a8b..ee00944408 100644 --- a/apps/labrinth/src/routes/v3/reports.rs +++ b/apps/labrinth/src/routes/v3/reports.rs @@ -222,12 +222,14 @@ pub async fn report_create( #[derive(Deserialize)] pub struct ReportsRequestOptions { #[serde(default = "default_count")] - pub count: i16, + pub count: u16, + #[serde(default)] + pub offset: u32, #[serde(default = "default_all")] pub all: bool, } -fn default_count() -> i16 { +fn default_count() -> u16 { 100 } fn default_all() -> bool { @@ -238,7 +240,7 @@ pub async fn reports( req: HttpRequest, pool: web::Data, redis: web::Data, - count: web::Query, + request_opts: web::Query, session_queue: web::Data, ) -> Result { let user = get_user_from_headers( @@ -253,15 +255,17 @@ pub async fn reports( use futures::stream::TryStreamExt; - let report_ids = if user.role.is_mod() && count.all { + let report_ids = if user.role.is_mod() && request_opts.all { sqlx::query!( " SELECT id FROM reports WHERE closed = FALSE ORDER BY created ASC - LIMIT $1; + OFFSET $2 + LIMIT $1 ", - count.count as i64 + request_opts.count as i64, + request_opts.offset as i64 ) .fetch(&**pool) .map_ok(|m| crate::database::models::ids::DBReportId(m.id)) @@ -273,10 +277,12 @@ pub async fn reports( SELECT id FROM reports WHERE closed = FALSE AND reporter = $1 ORDER BY created ASC - LIMIT $2; + OFFSET $3 + LIMIT $2 ", user.id.0 as i64, - count.count as i64 + request_opts.count as i64, + request_opts.offset as i64 ) .fetch(&**pool) .map_ok(|m| crate::database::models::ids::DBReportId(m.id))