Fix file version updates not considering visibility (#6105)

This commit is contained in:
aecsocket
2026-05-16 17:18:18 +01:00
committed by GitHub
parent 02a7774722
commit cee942dcef
4 changed files with 56 additions and 34 deletions
@@ -0,0 +1,33 @@
{
"db_name": "PostgreSQL",
"query": "\n SELECT v.id version_id, v.mod_id mod_id\n FROM mods m\n INNER JOIN versions v ON m.id = v.mod_id AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4)) AND v.status = ANY($5)\n INNER JOIN version_fields vf ON vf.field_id = 3 AND v.id = vf.version_id\n INNER JOIN loader_field_enum_values lfev ON vf.enum_value = lfev.id AND (cardinality($2::varchar[]) = 0 OR lfev.value = ANY($2::varchar[]))\n INNER JOIN loaders_versions lv ON lv.version_id = v.id\n INNER JOIN loaders l on lv.loader_id = l.id AND (cardinality($3::varchar[]) = 0 OR l.loader = ANY($3::varchar[]))\n WHERE m.id = ANY($1) AND m.status = ANY($6)\n ORDER BY v.date_published ASC\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "version_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "mod_id",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Int8Array",
"VarcharArray",
"VarcharArray",
"VarcharArray",
"TextArray",
"TextArray"
]
},
"nullable": [
false,
false
]
},
"hash": "0f9aa21316eb3ef0ff92f0c74d5b367a5b03dd86543c7a859fd6b7f2dfef2967"
}
@@ -1,31 +0,0 @@
{
"db_name": "PostgreSQL",
"query": "\n SELECT v.id version_id, v.mod_id mod_id\n FROM mods m\n INNER JOIN versions v ON m.id = v.mod_id AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4))\n INNER JOIN version_fields vf ON vf.field_id = 3 AND v.id = vf.version_id\n INNER JOIN loader_field_enum_values lfev ON vf.enum_value = lfev.id AND (cardinality($2::varchar[]) = 0 OR lfev.value = ANY($2::varchar[]))\n INNER JOIN loaders_versions lv ON lv.version_id = v.id\n INNER JOIN loaders l on lv.loader_id = l.id AND (cardinality($3::varchar[]) = 0 OR l.loader = ANY($3::varchar[]))\n WHERE m.id = ANY($1)\n ORDER BY v.date_published ASC\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "version_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "mod_id",
"type_info": "Int8"
}
],
"parameters": {
"Left": [
"Int8Array",
"VarcharArray",
"VarcharArray",
"VarcharArray"
]
},
"nullable": [
false,
false
]
},
"hash": "26210e28d63aa61e6bea453b720bc18674c8f19334bdbeb48244a941f10a5e17"
}
+11 -3
View File
@@ -6,7 +6,7 @@ use crate::database::ReadOnlyPgPool;
use crate::database::redis::RedisPool;
use crate::models::ids::VersionId;
use crate::models::pats::Scopes;
use crate::models::projects::VersionType;
use crate::models::projects::{ProjectStatus, VersionStatus, VersionType};
use crate::models::teams::ProjectPermissions;
use crate::queue::session::AuthQueue;
use crate::routes::internal::delphi;
@@ -406,18 +406,26 @@ async fn update_files_internal(
"
SELECT v.id version_id, v.mod_id mod_id
FROM mods m
INNER JOIN versions v ON m.id = v.mod_id AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4))
INNER JOIN versions v ON m.id = v.mod_id AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4)) AND v.status = ANY($5)
INNER JOIN version_fields vf ON vf.field_id = 3 AND v.id = vf.version_id
INNER JOIN loader_field_enum_values lfev ON vf.enum_value = lfev.id AND (cardinality($2::varchar[]) = 0 OR lfev.value = ANY($2::varchar[]))
INNER JOIN loaders_versions lv ON lv.version_id = v.id
INNER JOIN loaders l on lv.loader_id = l.id AND (cardinality($3::varchar[]) = 0 OR l.loader = ANY($3::varchar[]))
WHERE m.id = ANY($1)
WHERE m.id = ANY($1) AND m.status = ANY($6)
ORDER BY v.date_published ASC
",
&files.iter().map(|x| x.project_id.0).collect::<Vec<_>>(),
&update_data.game_versions.clone().unwrap_or_default(),
&update_data.loaders.clone().unwrap_or_default(),
&update_data.version_types.clone().unwrap_or_default().iter().map(|x| x.to_string()).collect::<Vec<_>>(),
&*VersionStatus::iterator()
.filter(|x| !x.is_hidden())
.map(|x| x.to_string())
.collect::<Vec<String>>(),
&*ProjectStatus::iterator()
.filter(|x| !x.is_hidden())
.map(|x| x.to_string())
.collect::<Vec<String>>(),
)
.fetch(&***pool)
.try_fold(DashMap::new(), |acc : DashMap<_,Vec<database::models::ids::DBVersionId>>, m| {
+12
View File
@@ -132,6 +132,18 @@ async fn version_updates() {
beta_version_id
);
let versions = api
.update_files_deserialized_common(
"sha1",
vec![beta_version_hash.to_string()],
None,
None,
None,
None,
)
.await;
assert!(versions.is_empty());
// When there is only the one version, there should be no updates
let version = api
.get_update_from_hash_deserialized_common(