Apply additional categories fix to search indexing (#428)
* Apply additional categories fix to search indexing * fix edit version validator
This commit is contained in:
parent
76c0fa2fe2
commit
9c7b34d5e6
314
sqlx-data.json
314
sqlx-data.json
@ -2323,166 +2323,6 @@
|
||||
},
|
||||
"query": "\n DELETE FROM mod_follows\n WHERE mod_id = $1\n "
|
||||
},
|
||||
"5e8ba7795160f4af3ce89526e721bd2f26067538fa4ecd9b1c4fafb76764a8c0": {
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"name": "id",
|
||||
"ordinal": 0,
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"name": "project_type",
|
||||
"ordinal": 1,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "title",
|
||||
"ordinal": 2,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "description",
|
||||
"ordinal": 3,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "downloads",
|
||||
"ordinal": 4,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "follows",
|
||||
"ordinal": 5,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "icon_url",
|
||||
"ordinal": 6,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "published",
|
||||
"ordinal": 7,
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"name": "approved",
|
||||
"ordinal": 8,
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"name": "updated",
|
||||
"ordinal": 9,
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"name": "team_id",
|
||||
"ordinal": 10,
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"name": "license",
|
||||
"ordinal": 11,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "slug",
|
||||
"ordinal": 12,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "status_name",
|
||||
"ordinal": 13,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "client_side_type",
|
||||
"ordinal": 14,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "server_side_type",
|
||||
"ordinal": 15,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "short",
|
||||
"ordinal": 16,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "project_type_name",
|
||||
"ordinal": 17,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "username",
|
||||
"ordinal": 18,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "categories",
|
||||
"ordinal": 19,
|
||||
"type_info": "VarcharArray"
|
||||
},
|
||||
{
|
||||
"name": "additional_categories",
|
||||
"ordinal": 20,
|
||||
"type_info": "VarcharArray"
|
||||
},
|
||||
{
|
||||
"name": "loaders",
|
||||
"ordinal": 21,
|
||||
"type_info": "VarcharArray"
|
||||
},
|
||||
{
|
||||
"name": "versions",
|
||||
"ordinal": 22,
|
||||
"type_info": "VarcharArray"
|
||||
},
|
||||
{
|
||||
"name": "gallery",
|
||||
"ordinal": 23,
|
||||
"type_info": "VarcharArray"
|
||||
}
|
||||
],
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Text",
|
||||
"Text",
|
||||
"Text"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query": "\n SELECT m.id id, m.project_type project_type, m.title title, m.description description, m.downloads downloads, m.follows follows,\n m.icon_url icon_url, m.published published, m.approved approved, m.updated updated,\n m.team_id team_id, m.license license, m.slug slug,\n s.status status_name, cs.name client_side_type, ss.name server_side_type, l.short short, pt.name project_type_name, u.username username,\n ARRAY_AGG(DISTINCT c.category) filter (where c.category is not null) categories, ARRAY_AGG(DISTINCT ca.category) filter (where ca.category is not null) additional_categories, ARRAY_AGG(DISTINCT lo.loader) filter (where lo.loader is not null) loaders, ARRAY_AGG(DISTINCT gv.version) filter (where gv.version is not null) versions,\n ARRAY_AGG(DISTINCT mg.image_url) filter (where mg.image_url is not null) gallery\n FROM mods m\n LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id\n LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id AND mc.is_additional = FALSE\n LEFT OUTER JOIN categories ca ON mc.joining_category_id = ca.id AND mc.is_additional = TRUE\n LEFT OUTER JOIN versions v ON v.mod_id = m.id\n LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id\n LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id\n LEFT OUTER JOIN loaders_versions lv ON lv.version_id = v.id\n LEFT OUTER JOIN loaders lo ON lo.id = lv.loader_id\n LEFT OUTER JOIN mods_gallery mg ON mg.mod_id = m.id\n INNER JOIN statuses s ON s.id = m.status\n INNER JOIN project_types pt ON pt.id = m.project_type\n INNER JOIN side_types cs ON m.client_side = cs.id\n INNER JOIN side_types ss ON m.server_side = ss.id\n INNER JOIN licenses l ON m.license = l.id\n INNER JOIN team_members tm ON tm.team_id = m.team_id AND tm.role = $3 AND tm.accepted = TRUE\n INNER JOIN users u ON tm.user_id = u.id\n WHERE s.status = $1 OR s.status = $2\n GROUP BY m.id, s.id, cs.id, ss.id, l.id, pt.id, u.id;\n "
|
||||
},
|
||||
"5eb2795d25d6d03e22564048c198d821cd5ff22eb4e39b9dd7f198c9113d4f87": {
|
||||
"describe": {
|
||||
"columns": [],
|
||||
@ -4156,6 +3996,160 @@
|
||||
},
|
||||
"query": "\n DELETE FROM teams\n WHERE id = $1\n "
|
||||
},
|
||||
"b41ba860c9d5402ba78297800b9df632a45718f5680a4e96d05372e59466ed7d": {
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"name": "id",
|
||||
"ordinal": 0,
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"name": "project_type",
|
||||
"ordinal": 1,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "title",
|
||||
"ordinal": 2,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "description",
|
||||
"ordinal": 3,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "downloads",
|
||||
"ordinal": 4,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "follows",
|
||||
"ordinal": 5,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "icon_url",
|
||||
"ordinal": 6,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "published",
|
||||
"ordinal": 7,
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"name": "approved",
|
||||
"ordinal": 8,
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"name": "updated",
|
||||
"ordinal": 9,
|
||||
"type_info": "Timestamptz"
|
||||
},
|
||||
{
|
||||
"name": "team_id",
|
||||
"ordinal": 10,
|
||||
"type_info": "Int8"
|
||||
},
|
||||
{
|
||||
"name": "license",
|
||||
"ordinal": 11,
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
"name": "slug",
|
||||
"ordinal": 12,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "status_name",
|
||||
"ordinal": 13,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "client_side_type",
|
||||
"ordinal": 14,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "server_side_type",
|
||||
"ordinal": 15,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "short",
|
||||
"ordinal": 16,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "project_type_name",
|
||||
"ordinal": 17,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "username",
|
||||
"ordinal": 18,
|
||||
"type_info": "Varchar"
|
||||
},
|
||||
{
|
||||
"name": "categories",
|
||||
"ordinal": 19,
|
||||
"type_info": "TextArray"
|
||||
},
|
||||
{
|
||||
"name": "loaders",
|
||||
"ordinal": 20,
|
||||
"type_info": "VarcharArray"
|
||||
},
|
||||
{
|
||||
"name": "versions",
|
||||
"ordinal": 21,
|
||||
"type_info": "VarcharArray"
|
||||
},
|
||||
{
|
||||
"name": "gallery",
|
||||
"ordinal": 22,
|
||||
"type_info": "VarcharArray"
|
||||
}
|
||||
],
|
||||
"nullable": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Text",
|
||||
"Text",
|
||||
"Text"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query": "\n SELECT m.id id, m.project_type project_type, m.title title, m.description description, m.downloads downloads, m.follows follows,\n m.icon_url icon_url, m.published published, m.approved approved, m.updated updated,\n m.team_id team_id, m.license license, m.slug slug,\n s.status status_name, cs.name client_side_type, ss.name server_side_type, l.short short, pt.name project_type_name, u.username username,\n ARRAY_AGG(DISTINCT c.category || ' |||| ' || mc.is_additional) filter (where c.category is not null) categories,\n ARRAY_AGG(DISTINCT lo.loader) filter (where lo.loader is not null) loaders,\n ARRAY_AGG(DISTINCT gv.version) filter (where gv.version is not null) versions,\n ARRAY_AGG(DISTINCT mg.image_url) filter (where mg.image_url is not null) gallery\n FROM mods m\n LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id\n LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id\n LEFT OUTER JOIN versions v ON v.mod_id = m.id\n LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id\n LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id\n LEFT OUTER JOIN loaders_versions lv ON lv.version_id = v.id\n LEFT OUTER JOIN loaders lo ON lo.id = lv.loader_id\n LEFT OUTER JOIN mods_gallery mg ON mg.mod_id = m.id\n INNER JOIN statuses s ON s.id = m.status\n INNER JOIN project_types pt ON pt.id = m.project_type\n INNER JOIN side_types cs ON m.client_side = cs.id\n INNER JOIN side_types ss ON m.server_side = ss.id\n INNER JOIN licenses l ON m.license = l.id\n INNER JOIN team_members tm ON tm.team_id = m.team_id AND tm.role = $3 AND tm.accepted = TRUE\n INNER JOIN users u ON tm.user_id = u.id\n WHERE s.status = $1 OR s.status = $2\n GROUP BY m.id, s.id, cs.id, ss.id, l.id, pt.id, u.id;\n "
|
||||
},
|
||||
"b69a6f42965b3e7103fcbf46e39528466926789ff31e9ed2591bb175527ec169": {
|
||||
"describe": {
|
||||
"columns": [],
|
||||
|
||||
@ -167,7 +167,7 @@ pub async fn version_get(
|
||||
|
||||
#[derive(Serialize, Deserialize, Validate)]
|
||||
pub struct EditVersion {
|
||||
#[validate(length(min = 3, max = 256))]
|
||||
#[validate(length(min = 1, max = 256))]
|
||||
pub name: Option<String>,
|
||||
#[validate(
|
||||
length(min = 1, max = 64),
|
||||
|
||||
@ -17,12 +17,13 @@ pub async fn index_local(
|
||||
m.icon_url icon_url, m.published published, m.approved approved, m.updated updated,
|
||||
m.team_id team_id, m.license license, m.slug slug,
|
||||
s.status status_name, cs.name client_side_type, ss.name server_side_type, l.short short, pt.name project_type_name, u.username username,
|
||||
ARRAY_AGG(DISTINCT c.category) filter (where c.category is not null) categories, ARRAY_AGG(DISTINCT ca.category) filter (where ca.category is not null) additional_categories, ARRAY_AGG(DISTINCT lo.loader) filter (where lo.loader is not null) loaders, ARRAY_AGG(DISTINCT gv.version) filter (where gv.version is not null) versions,
|
||||
ARRAY_AGG(DISTINCT c.category || ' |||| ' || mc.is_additional) filter (where c.category is not null) categories,
|
||||
ARRAY_AGG(DISTINCT lo.loader) filter (where lo.loader is not null) loaders,
|
||||
ARRAY_AGG(DISTINCT gv.version) filter (where gv.version is not null) versions,
|
||||
ARRAY_AGG(DISTINCT mg.image_url) filter (where mg.image_url is not null) gallery
|
||||
FROM mods m
|
||||
LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id
|
||||
LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id AND mc.is_additional = FALSE
|
||||
LEFT OUTER JOIN categories ca ON mc.joining_category_id = ca.id AND mc.is_additional = TRUE
|
||||
LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id
|
||||
LEFT OUTER JOIN versions v ON v.mod_id = m.id
|
||||
LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id
|
||||
LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id
|
||||
@ -46,13 +47,27 @@ pub async fn index_local(
|
||||
.fetch_many(&pool)
|
||||
.try_filter_map(|e| async {
|
||||
Ok(e.right().map(|m| {
|
||||
let mut categories = m.categories.unwrap_or_default();
|
||||
let categories_raw = m.categories.unwrap_or_default();
|
||||
|
||||
let mut additional_categories = Vec::new();
|
||||
let mut categories = Vec::new();
|
||||
|
||||
for category in categories_raw {
|
||||
let category: Vec<&str> = category.split(" |||| ").collect();
|
||||
|
||||
if category.len() >= 2 {
|
||||
if category[1].parse::<bool>().ok().unwrap_or_default() {
|
||||
additional_categories.push(category[0].to_string());
|
||||
} else {
|
||||
categories.push(category[0].to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
categories.append(&mut m.loaders.unwrap_or_default());
|
||||
|
||||
let primary_categories = categories.clone();
|
||||
|
||||
categories.append(&mut m.additional_categories.unwrap_or_default());
|
||||
let display_categories = categories.clone();
|
||||
categories.append(&mut additional_categories.clone());
|
||||
|
||||
let versions = m.versions.unwrap_or_default();
|
||||
|
||||
@ -79,7 +94,7 @@ pub async fn index_local(
|
||||
slug: m.slug,
|
||||
project_type: m.project_type_name,
|
||||
gallery: m.gallery.unwrap_or_default(),
|
||||
display_categories: primary_categories
|
||||
display_categories
|
||||
}
|
||||
}))
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user