Fix some issues with search and mod creation (#77)

This commit is contained in:
Aeledfyr
2020-10-16 12:04:38 -05:00
committed by GitHub
parent 77d35b61a9
commit 7983e82b60
4 changed files with 71 additions and 34 deletions

View File

@@ -203,7 +203,12 @@ async fn mod_create_inner(
while let Some(chunk) = field.next().await {
data.extend_from_slice(&chunk.map_err(CreateError::MultipartError)?);
}
mod_create_data = Some(serde_json::from_slice(&data)?);
let create_data: ModCreateData = serde_json::from_slice(&data)?;
check_length("mod_name", 3, 255, &*create_data.mod_name)?;
check_length("mod_description", 3, 2048, &*create_data.mod_description)?;
mod_create_data = Some(create_data);
continue;
}
@@ -211,9 +216,6 @@ async fn mod_create_inner(
CreateError::InvalidInput(String::from("`data` field must come before file fields"))
})?;
check_length("mod_name", 3, 255, &*create_data.mod_name)?;
check_length("mod_description", 3, 2048, &*create_data.mod_description)?;
let (file_name, file_extension) =
super::version_creation::get_name_ext(&content_disposition)?;
@@ -374,18 +376,35 @@ async fn mod_create_inner(
file_name: upload_data.file_name.clone(),
});
let mut author_username = None;
let mut author_id = None;
let team = models::team_item::TeamBuilder {
members: create_data
.team_members
.into_iter()
.map(|member| models::team_item::TeamMemberBuilder {
user_id: member.user_id.into(),
name: member.name,
role: member.role,
.map(|member| {
if member.role == crate::models::teams::OWNER_ROLE {
author_id = Some(member.user_id);
author_username = Some(member.name.clone());
}
models::team_item::TeamMemberBuilder {
user_id: member.user_id.into(),
name: member.name,
role: member.role,
}
})
.collect(),
};
let (author_username, author_id) = if let (Some(u), Some(id)) = (author_username, author_id) {
(u, id)
} else {
return Err(CreateError::InvalidInput(String::from(
"A mod must have an author",
)));
};
let team_id = team.insert(&mut *transaction).await?;
let status = ModStatus::Processing;
@@ -440,8 +459,8 @@ async fn mod_create_inner(
versions: versions_list,
page_url: format!("https://modrinth.com/mod/{}", mod_id),
icon_url: mod_builder.icon_url.clone().unwrap(),
author: user.username,
author_url: format!("https://modrinth.com/user/{}", user.id),
author: author_username,
author_url: format!("https://modrinth.com/user/{}", author_id),
// TODO: latest version info
latest_version: String::new(),
downloads: 0,