Fix packs logic (#837)

* Fix packs logic

* Clippy
This commit is contained in:
Geometrically
2024-01-07 18:36:42 -05:00
committed by GitHub
parent c3448033de
commit 34baf44534
5 changed files with 30 additions and 9 deletions

View File

@@ -2,7 +2,7 @@ use crate::{models::v2::projects::LegacySideType, util::env::parse_strings_from_
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use validator::Validate; use validator::Validate;
#[derive(Serialize, Deserialize, Validate, Eq, PartialEq)] #[derive(Serialize, Deserialize, Validate, Eq, PartialEq, Debug)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct PackFormat { pub struct PackFormat {
pub game: String, pub game: String,
@@ -18,7 +18,7 @@ pub struct PackFormat {
pub dependencies: std::collections::HashMap<PackDependency, String>, pub dependencies: std::collections::HashMap<PackDependency, String>,
} }
#[derive(Serialize, Deserialize, Validate, Eq, PartialEq)] #[derive(Serialize, Deserialize, Validate, Eq, PartialEq, Debug)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct PackFile { pub struct PackFile {
pub path: String, pub path: String,
@@ -54,7 +54,7 @@ fn validate_download_url(values: &[String]) -> Result<(), validator::ValidationE
Ok(()) Ok(())
} }
#[derive(Serialize, Deserialize, Eq, PartialEq, Hash)] #[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Debug)]
#[serde(rename_all = "camelCase", from = "String")] #[serde(rename_all = "camelCase", from = "String")]
pub enum PackFileHash { pub enum PackFileHash {
Sha1, Sha1,
@@ -72,14 +72,14 @@ impl From<String> for PackFileHash {
} }
} }
#[derive(Serialize, Deserialize, Eq, PartialEq, Hash)] #[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Debug)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub enum EnvType { pub enum EnvType {
Client, Client,
Server, Server,
} }
#[derive(Serialize, Deserialize, Clone, Hash, PartialEq, Eq)] #[derive(Serialize, Deserialize, Clone, Hash, PartialEq, Eq, Debug)]
#[serde(rename_all = "kebab-case")] #[serde(rename_all = "kebab-case")]
pub enum PackDependency { pub enum PackDependency {
Forge, Forge,

View File

@@ -46,6 +46,17 @@ pub async fn version_list(
redis: web::Data<RedisPool>, redis: web::Data<RedisPool>,
session_queue: web::Data<AuthQueue>, session_queue: web::Data<AuthQueue>,
) -> Result<HttpResponse, ApiError> { ) -> Result<HttpResponse, ApiError> {
let loaders = if let Some(loaders) = filters.loaders {
if let Ok(mut loaders) = serde_json::from_str::<Vec<String>>(&loaders) {
loaders.push("mrpack".to_string());
Some(loaders)
} else {
None
}
} else {
None
};
let loader_fields = if let Some(game_versions) = filters.game_versions { let loader_fields = if let Some(game_versions) = filters.game_versions {
// TODO: extract this logic which is similar to the other v2->v3 version_file functions // TODO: extract this logic which is similar to the other v2->v3 version_file functions
let mut loader_fields = HashMap::new(); let mut loader_fields = HashMap::new();
@@ -57,6 +68,17 @@ pub async fn version_list(
game_versions.push(serde_json::json!(gv.clone())); game_versions.push(serde_json::json!(gv.clone()));
} }
loader_fields.insert("game_versions".to_string(), game_versions); loader_fields.insert("game_versions".to_string(), game_versions);
if let Some(ref loaders) = loaders {
loader_fields.insert(
"loaders".to_string(),
loaders
.iter()
.map(|x| serde_json::json!(x.clone()))
.collect(),
);
}
serde_json::to_string(&loader_fields).ok() serde_json::to_string(&loader_fields).ok()
}) })
} else { } else {
@@ -65,7 +87,7 @@ pub async fn version_list(
let filters = v3::versions::VersionListFilters { let filters = v3::versions::VersionListFilters {
loader_fields, loader_fields,
loaders: filters.loaders, loaders: loaders.and_then(|x| serde_json::to_string(&x).ok()),
featured: filters.featured, featured: filters.featured,
version_type: filters.version_type, version_type: filters.version_type,
limit: filters.limit, limit: filters.limit,

View File

@@ -9,7 +9,6 @@ use meilisearch_sdk::client::Client;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
use std::borrow::Cow; use std::borrow::Cow;
use std::cmp::min;
use std::collections::HashMap; use std::collections::HashMap;
use std::fmt::Write; use std::fmt::Write;
use thiserror::Error; use thiserror::Error;

View File

@@ -44,7 +44,7 @@ pub enum ValidationError {
Database(#[from] DatabaseError), Database(#[from] DatabaseError),
} }
#[derive(Eq, PartialEq)] #[derive(Eq, PartialEq, Debug)]
pub enum ValidationResult { pub enum ValidationResult {
/// File should be marked as primary with pack file data /// File should be marked as primary with pack file data
PassWithPackDataAndFiles { PassWithPackDataAndFiles {

View File

@@ -18,7 +18,7 @@ impl super::Validator for ModpackValidator {
} }
fn get_supported_loaders(&self) -> &[&str] { fn get_supported_loaders(&self) -> &[&str] {
&["forge", "fabric", "quilt"] &["forge", "fabric", "quilt", "mrpack"]
} }
fn get_supported_game_versions(&self) -> SupportedGameVersions { fn get_supported_game_versions(&self) -> SupportedGameVersions {