Skip to content
This repository was archived by the owner on Oct 19, 2024. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions src/clickhouse/fetch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,9 @@ pub async fn fetch_countries_downloads(
end_date: DateTime<Utc>,
client: Arc<clickhouse::Client>,
) -> Result<Vec<ReturnCountry>, ApiError> {
let query = client.query(
"
let query = client
.query(
"
SELECT
country,
project_id,
Expand All @@ -126,8 +127,8 @@ pub async fn fetch_countries_downloads(
GROUP BY
country,
project_id
"
)
",
)
.bind(start_date.timestamp())
.bind(end_date.timestamp())
.bind(projects.iter().map(|x| x.0).collect::<Vec<_>>());
Expand All @@ -141,8 +142,9 @@ pub async fn fetch_countries_views(
end_date: DateTime<Utc>,
client: Arc<clickhouse::Client>,
) -> Result<Vec<ReturnCountry>, ApiError> {
let query = client.query(
"
let query = client
.query(
"
SELECT
country,
project_id,
Expand All @@ -152,8 +154,8 @@ pub async fn fetch_countries_views(
GROUP BY
country,
project_id
"
)
",
)
.bind(start_date.timestamp())
.bind(end_date.timestamp())
.bind(projects.iter().map(|x| x.0).collect::<Vec<_>>());
Expand Down
10 changes: 0 additions & 10 deletions src/database/models/project_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,13 +151,11 @@ pub struct ProjectBuilder {
pub license_url: Option<String>,
pub categories: Vec<CategoryId>,
pub additional_categories: Vec<CategoryId>,
pub initial_versions: Vec<super::version_item::VersionBuilder>,
pub status: ProjectStatus,
pub requested_status: Option<ProjectStatus>,
pub license: String,
pub slug: Option<String>,
pub link_urls: Vec<LinkUrl>,
pub gallery_items: Vec<GalleryItem>,
pub color: Option<u32>,
pub monetization_status: MonetizationStatus,
}
Expand Down Expand Up @@ -201,21 +199,13 @@ impl ProjectBuilder {

let ProjectBuilder {
link_urls,
gallery_items,
categories,
additional_categories,
..
} = self;

for mut version in self.initial_versions {
version.project_id = self.project_id;
version.insert(&mut *transaction).await?;
}

LinkUrl::insert_many_projects(link_urls, self.project_id, &mut *transaction).await?;

GalleryItem::insert_many(gallery_items, self.project_id, &mut *transaction).await?;

let project_id = self.project_id;
let mod_categories = categories
.into_iter()
Expand Down
102 changes: 57 additions & 45 deletions src/routes/v2/project_creation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@ use crate::database::redis::RedisPool;
use crate::file_hosting::FileHost;
use crate::models;
use crate::models::ids::ImageId;
use crate::models::projects::{Loader, Project, ProjectStatus};
use crate::models::projects::{Project, ProjectStatus};
use crate::models::v2::projects::{DonationLink, LegacyProject, LegacySideType};
use crate::queue::session::AuthQueue;
use crate::routes::v3::project_creation::default_project_type;
use crate::routes::v3::project_creation::{CreateError, NewGalleryItem};
use crate::routes::v3::project_creation::CreateError;
use crate::routes::{v2_reroute, v3};
use actix_multipart::Multipart;
use actix_web::web::Data;
use actix_web::{post, HttpRequest, HttpResponse};
use serde::{Deserialize, Serialize};
use serde_json::json;
use sqlx::postgres::PgPool;

use std::collections::HashMap;
Expand Down Expand Up @@ -111,6 +110,7 @@ struct ProjectCreateData {
pub donation_urls: Option<Vec<DonationLink>>,

/// An optional boolean. If true, the project will be created as a draft.
/// This is now explicitly ignored, as it was deprecated for a while.
pub is_draft: Option<bool>,

/// The license id that the project follows
Expand Down Expand Up @@ -148,50 +148,50 @@ pub async fn project_create(
req.headers().clone(),
|legacy_create: ProjectCreateData| async move {
// Side types will be applied to each version
let client_side = legacy_create.client_side;
let server_side = legacy_create.server_side;
// let client_side = legacy_create.client_side;
// let server_side = legacy_create.server_side;

let project_type = legacy_create.project_type;
// let project_type = legacy_create.project_type;

let initial_versions = legacy_create
.initial_versions
.into_iter()
.map(|v| {
let mut fields = HashMap::new();
fields.extend(v2_reroute::convert_side_types_v3(client_side, server_side));
fields.insert("game_versions".to_string(), json!(v.game_versions));
// let initial_versions = legacy_create
// .initial_versions
// .into_iter()
// .map(|v| {
// let mut fields = HashMap::new();
// fields.extend(v2_reroute::convert_side_types_v3(client_side, server_side));
// fields.insert("game_versions".to_string(), json!(v.game_versions));

// Modpacks now use the "mrpack" loader, and loaders are converted to loader fields.
// Setting of 'project_type' directly is removed, it's loader-based now.
if project_type == "modpack" {
fields.insert("mrpack_loaders".to_string(), json!(v.loaders));
}
// // Modpacks now use the "mrpack" loader, and loaders are converted to loader fields.
// // Setting of 'project_type' directly is removed, it's loader-based now.
// if project_type == "modpack" {
// fields.insert("mrpack_loaders".to_string(), json!(v.loaders));
// }

let loaders = if project_type == "modpack" {
vec![Loader("mrpack".to_string())]
} else {
v.loaders
};
// let loaders = if project_type == "modpack" {
// vec![Loader("mrpack".to_string())]
// } else {
// v.loaders
// };

v3::version_creation::InitialVersionData {
project_id: v.project_id,
file_parts: v.file_parts,
version_number: v.version_number,
version_title: v.version_title,
version_body: v.version_body,
dependencies: v.dependencies,
release_channel: v.release_channel,
loaders,
featured: v.featured,
primary_file: v.primary_file,
status: v.status,
file_types: v.file_types,
uploaded_images: v.uploaded_images,
ordering: v.ordering,
fields,
}
})
.collect();
// v3::version_creation::InitialVersionData {
// project_id: v.project_id,
// file_parts: v.file_parts,
// version_number: v.version_number,
// version_title: v.version_title,
// version_body: v.version_body,
// dependencies: v.dependencies,
// release_channel: v.release_channel,
// loaders,
// featured: v.featured,
// primary_file: v.primary_file,
// status: v.status,
// file_types: v.file_types,
// uploaded_images: v.uploaded_images,
// ordering: v.ordering,
// fields,
// }
// })
// .collect();

let mut link_urls = HashMap::new();
if let Some(issue_url) = legacy_create.issues_url {
Expand All @@ -217,14 +217,11 @@ pub async fn project_create(
slug: legacy_create.slug,
summary: legacy_create.description, // Description becomes summary
description: legacy_create.body, // Body becomes description
initial_versions,
categories: legacy_create.categories,
additional_categories: legacy_create.additional_categories,
license_url: legacy_create.license_url,
link_urls,
is_draft: legacy_create.is_draft,
license_id: legacy_create.license_id,
gallery_items: legacy_create.gallery_items,
requested_status: legacy_create.requested_status,
uploaded_images: legacy_create.uploaded_images,
organization_id: legacy_create.organization_id,
Expand Down Expand Up @@ -257,3 +254,18 @@ pub async fn project_create(
Err(response) => Ok(response),
}
}

#[derive(Serialize, Deserialize, Validate, Clone)]
pub struct NewGalleryItem {
/// The name of the multipart item where the gallery media is located
pub item: String,
/// Whether the gallery item should show in search or not
pub featured: bool,
#[validate(length(min = 1, max = 2048))]
/// The title of the gallery item
pub name: Option<String>,
#[validate(length(min = 1, max = 2048))]
/// The description of the gallery item
pub description: Option<String>,
pub ordering: i64,
}
Loading