Optimize dependencies route and change return value (#230)
This commit is contained in:
parent
66becbc4cc
commit
c9c58b65a6
@ -228,7 +228,7 @@ pub async fn auth_callback(
|
||||
|
||||
transaction.commit().await?;
|
||||
|
||||
let redirect_url = if result.url.contains("?") {
|
||||
let redirect_url = if result.url.contains('?') {
|
||||
format!("{}&code={}", result.url, token.access_token)
|
||||
} else {
|
||||
format!("{}?code={}", result.url, token.access_token)
|
||||
|
||||
@ -16,7 +16,6 @@ use actix_web::{delete, get, patch, post, web, HttpRequest, HttpResponse};
|
||||
use futures::StreamExt;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use validator::Validate;
|
||||
|
||||
@ -133,8 +132,8 @@ pub async fn project_get(
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct DependencyInfo {
|
||||
pub project: Option<models::projects::Project>,
|
||||
pub version: Option<models::projects::Version>,
|
||||
pub projects: Vec<models::projects::Project>,
|
||||
pub versions: Vec<models::projects::Version>,
|
||||
}
|
||||
|
||||
#[get("dependencies")]
|
||||
@ -177,50 +176,27 @@ pub async fn dependency_list(
|
||||
)>>()
|
||||
.await?;
|
||||
|
||||
let projects = database::Project::get_many_full(
|
||||
dependencies.iter().map(|x| x.2).flatten().collect(),
|
||||
&**pool,
|
||||
)
|
||||
.await?;
|
||||
let versions = database::Version::get_many_full(
|
||||
dependencies.iter().map(|x| x.1).flatten().collect(),
|
||||
&**pool,
|
||||
)
|
||||
.await?;
|
||||
let (projects_result, versions_result) = futures::join!(
|
||||
database::Project::get_many_full(
|
||||
dependencies.iter().map(|x| x.2).flatten().collect(),
|
||||
&**pool,
|
||||
),
|
||||
database::Version::get_many_full(
|
||||
dependencies.iter().map(|x| x.1).flatten().collect(),
|
||||
&**pool,
|
||||
)
|
||||
);
|
||||
|
||||
let mut response: HashMap<models::projects::VersionId, Vec<DependencyInfo>> =
|
||||
HashMap::new();
|
||||
let projects = projects_result?
|
||||
.into_iter()
|
||||
.map(convert_project)
|
||||
.collect::<Vec<models::projects::Project>>();
|
||||
let versions = versions_result?
|
||||
.into_iter()
|
||||
.map(super::versions::convert_version)
|
||||
.collect::<Vec<models::projects::Version>>();
|
||||
|
||||
for dependency in dependencies {
|
||||
let deps = response.get_mut(&dependency.0.into());
|
||||
|
||||
let info = DependencyInfo {
|
||||
project: if let Some(id) = dependency.2 {
|
||||
projects
|
||||
.iter()
|
||||
.find(|x| x.inner.id == id)
|
||||
.map(|x| convert_project(x.clone()))
|
||||
} else {
|
||||
None
|
||||
},
|
||||
version: if let Some(id) = dependency.1 {
|
||||
versions
|
||||
.iter()
|
||||
.find(|x| x.id == id)
|
||||
.map(|x| super::versions::convert_version(x.clone()))
|
||||
} else {
|
||||
None
|
||||
},
|
||||
};
|
||||
|
||||
if let Some(deps) = deps {
|
||||
deps.push(info);
|
||||
} else {
|
||||
response.insert(dependency.0.into(), vec![info]);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(HttpResponse::Ok().json(response))
|
||||
Ok(HttpResponse::Ok().json(DependencyInfo { projects, versions }))
|
||||
} else {
|
||||
Ok(HttpResponse::NotFound().body(""))
|
||||
}
|
||||
|
||||
@ -62,10 +62,12 @@ pub async fn version_list(
|
||||
|
||||
// Attempt to populate versions with "auto featured" versions
|
||||
if response.is_empty() && !versions.is_empty() && filters.featured.unwrap_or(false) {
|
||||
let loaders = database::models::categories::Loader::list(&**pool).await?;
|
||||
let game_versions =
|
||||
let (loaders, game_versions) = futures::join!(
|
||||
database::models::categories::Loader::list(&**pool),
|
||||
database::models::categories::GameVersion::list_filter(None, Some(true), &**pool)
|
||||
.await?;
|
||||
);
|
||||
|
||||
let (loaders, game_versions) = (loaders?, game_versions?);
|
||||
|
||||
let mut joined_filters = Vec::new();
|
||||
for game_version in &game_versions {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user