diff --git a/apps/labrinth/.sqlx/query-6ebb0cffc875f50ebe95b91e4735f1c520155d65a5c51021224ab4461c688db8.json b/apps/labrinth/.sqlx/query-6ebb0cffc875f50ebe95b91e4735f1c520155d65a5c51021224ab4461c688db8.json new file mode 100644 index 0000000000..6d00c56a9f --- /dev/null +++ b/apps/labrinth/.sqlx/query-6ebb0cffc875f50ebe95b91e4735f1c520155d65a5c51021224ab4461c688db8.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT id FROM mods\n WHERE id = ANY($1)\n AND components ? 'minecraft_server'\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8Array" + ] + }, + "nullable": [ + false + ] + }, + "hash": "6ebb0cffc875f50ebe95b91e4735f1c520155d65a5c51021224ab4461c688db8" +} diff --git a/apps/labrinth/src/routes/v3/analytics_get/metrics/project_downloads.rs b/apps/labrinth/src/routes/v3/analytics_get/metrics/project_downloads.rs index 859521e6b9..e8d83a4453 100644 --- a/apps/labrinth/src/routes/v3/analytics_get/metrics/project_downloads.rs +++ b/apps/labrinth/src/routes/v3/analytics_get/metrics/project_downloads.rs @@ -332,9 +332,31 @@ async fn fetch_dependent_version_projects( DBVersion::get_many(&dependent_on_version_ids, cx.pool, cx.redis) .await?; + let dependent_project_ids = versions + .iter() + .map(|version| version.inner.project_id.0) + .collect::>(); + let server_projects = sqlx::query!( + " + SELECT id FROM mods + WHERE id = ANY($1) + AND components ? 'minecraft_server' + ", + &dependent_project_ids, + ) + .fetch_all(cx.pool) + .await + .wrap_internal_err("failed to fetch server dependent projects")? + .into_iter() + .map(|project| DBProjectId(project.id)) + .collect::>(); + Ok(versions .into_iter() - .map(|version| (version.inner.id, version.inner.project_id)) + .filter_map(|version| { + (!server_projects.contains(&version.inner.project_id)) + .then_some((version.inner.id, version.inner.project_id)) + }) .collect()) } @@ -419,6 +441,13 @@ pub(crate) async fn fetch( { continue; } + if uses(F::DependentProjectId) + && row.dependent_on_version_id.0 != 0 + && !dependent_version_projects + .contains_key(&row.dependent_on_version_id) + { + continue; + } let key = DownloadBucket { bucket: row.bucket,