You've already forked AstralRinth
forked from didirus/AstralRinth
Change index interval, add slug to search documents (#110)
* Change index interval, add slug to search documents * Allow the removal of '@' for slug get * Fix * Remove name and rename side type * Run prepare
This commit is contained in:
@@ -165,7 +165,7 @@ pub async fn mod_create(
|
||||
&mut transaction,
|
||||
&***file_host,
|
||||
&mut uploaded_files,
|
||||
&***indexing_queue
|
||||
&***indexing_queue,
|
||||
)
|
||||
.await;
|
||||
|
||||
@@ -457,7 +457,6 @@ async fn mod_create_inner(
|
||||
let team = models::team_item::TeamBuilder {
|
||||
members: vec![models::team_item::TeamMemberBuilder {
|
||||
user_id: current_user.id.into(),
|
||||
name: current_user.username.clone(),
|
||||
role: crate::models::teams::OWNER_ROLE.to_owned(),
|
||||
permissions: crate::models::teams::Permissions::ALL,
|
||||
accepted: true,
|
||||
|
||||
@@ -3,16 +3,16 @@ use crate::auth::get_user_from_headers;
|
||||
use crate::database;
|
||||
use crate::file_hosting::FileHost;
|
||||
use crate::models;
|
||||
use crate::models::mods::{DonationLink, License, ModStatus, SearchRequest, SideType};
|
||||
use crate::models::mods::{DonationLink, License, ModId, ModStatus, SearchRequest, SideType};
|
||||
use crate::models::teams::Permissions;
|
||||
use crate::search::indexing::queue::CreationQueue;
|
||||
use crate::search::{search_for_mod, SearchConfig, SearchError};
|
||||
use actix_web::web::Data;
|
||||
use actix_web::{delete, get, patch, web, HttpRequest, HttpResponse};
|
||||
use futures::StreamExt;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
use std::sync::Arc;
|
||||
use crate::search::indexing::queue::CreationQueue;
|
||||
use actix_web::web::Data;
|
||||
|
||||
#[get("mod")]
|
||||
pub async fn mod_search(
|
||||
@@ -133,13 +133,30 @@ pub async fn mod_slug_get(
|
||||
#[get("{id}")]
|
||||
pub async fn mod_get(
|
||||
req: HttpRequest,
|
||||
info: web::Path<(models::ids::ModId,)>,
|
||||
info: web::Path<(String,)>,
|
||||
pool: web::Data<PgPool>,
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let id = info.into_inner().0;
|
||||
let mod_data = database::models::Mod::get_full(id.into(), &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
let string = info.into_inner().0;
|
||||
let id_option: Option<ModId> = serde_json::from_str(&*format!("\"{}\"", string)).ok();
|
||||
|
||||
let mut mod_data;
|
||||
|
||||
if let Some(id) = id_option {
|
||||
mod_data = database::models::Mod::get_full(id.into(), &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
|
||||
if mod_data.is_none() {
|
||||
mod_data = database::models::Mod::get_full_from_slug(string, &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
}
|
||||
} else {
|
||||
mod_data = database::models::Mod::get_full_from_slug(string, &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
}
|
||||
|
||||
let user_option = get_user_from_headers(req.headers(), &**pool).await.ok();
|
||||
|
||||
if let Some(data) = mod_data {
|
||||
@@ -384,9 +401,11 @@ pub async fn mod_edit(
|
||||
if mod_item.status.is_searchable() && !status.is_searchable() {
|
||||
delete_from_index(id.into(), config).await?;
|
||||
} else if !mod_item.status.is_searchable() && status.is_searchable() {
|
||||
let index_mod =
|
||||
crate::search::indexing::local_import::query_one(mod_id.into(), &mut *transaction)
|
||||
.await?;
|
||||
let index_mod = crate::search::indexing::local_import::query_one(
|
||||
mod_id.into(),
|
||||
&mut *transaction,
|
||||
)
|
||||
.await?;
|
||||
|
||||
indexing_queue.add(index_mod);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ pub async fn team_members_get(
|
||||
.into_iter()
|
||||
.map(|data| crate::models::teams::TeamMember {
|
||||
user_id: data.user_id.into(),
|
||||
name: data.name,
|
||||
role: data.role,
|
||||
permissions: Some(data.permissions),
|
||||
})
|
||||
@@ -42,7 +41,6 @@ pub async fn team_members_get(
|
||||
.into_iter()
|
||||
.map(|data| crate::models::teams::TeamMember {
|
||||
user_id: data.user_id.into(),
|
||||
name: data.name,
|
||||
role: data.role,
|
||||
permissions: None,
|
||||
})
|
||||
@@ -81,7 +79,6 @@ pub async fn join_team(
|
||||
None,
|
||||
None,
|
||||
Some(true),
|
||||
None,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
@@ -174,7 +171,7 @@ pub async fn add_team_member(
|
||||
}
|
||||
}
|
||||
|
||||
let new_user = crate::database::models::User::get(member.user_id, &**pool)
|
||||
crate::database::models::User::get(member.user_id, &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?
|
||||
.ok_or_else(|| ApiError::InvalidInputError("An invalid User ID specified".to_string()))?;
|
||||
@@ -184,7 +181,6 @@ pub async fn add_team_member(
|
||||
id: new_id,
|
||||
team_id,
|
||||
user_id: new_member.user_id.into(),
|
||||
name: new_user.username,
|
||||
role: new_member.role.clone(),
|
||||
permissions: new_member.permissions,
|
||||
accepted: false,
|
||||
@@ -205,7 +201,6 @@ pub async fn add_team_member(
|
||||
pub struct EditTeamMember {
|
||||
pub permissions: Option<Permissions>,
|
||||
pub role: Option<String>,
|
||||
pub name: Option<String>,
|
||||
}
|
||||
|
||||
#[patch("{id}/members/{user_id}")]
|
||||
@@ -236,31 +231,6 @@ pub async fn edit_team_member(
|
||||
}
|
||||
};
|
||||
|
||||
// If the only thing being modified is the name, a user can
|
||||
// modify their own member without extra permissions.
|
||||
if user_id == current_user.id.into()
|
||||
&& edit_member.permissions.is_none()
|
||||
&& edit_member.role.is_none()
|
||||
{
|
||||
TeamMember::edit_team_member(
|
||||
id,
|
||||
user_id,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
edit_member.name.clone(),
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
|
||||
transaction
|
||||
.commit()
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
|
||||
return Ok(HttpResponse::Ok().body(""));
|
||||
}
|
||||
|
||||
if !member.permissions.contains(Permissions::EDIT_MEMBER) {
|
||||
return Err(ApiError::CustomAuthenticationError(
|
||||
"You don't have permission to edit members of this team".to_string(),
|
||||
@@ -287,7 +257,6 @@ pub async fn edit_team_member(
|
||||
edit_member.permissions,
|
||||
edit_member.role.clone(),
|
||||
None,
|
||||
edit_member.name.clone(),
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
|
||||
@@ -70,13 +70,29 @@ pub async fn user_username_get(
|
||||
|
||||
#[get("{id}")]
|
||||
pub async fn user_get(
|
||||
info: web::Path<(UserId,)>,
|
||||
info: web::Path<(String,)>,
|
||||
pool: web::Data<PgPool>,
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let id = info.into_inner().0;
|
||||
let user_data = User::get(id.into(), &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
let string = info.into_inner().0;
|
||||
let id_option: Option<UserId> = serde_json::from_str(&*format!("\"{}\"", string)).ok();
|
||||
|
||||
let mut user_data;
|
||||
|
||||
if let Some(id) = id_option {
|
||||
user_data = User::get(id.into(), &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
|
||||
if user_data.is_none() {
|
||||
user_data = User::get_from_username(string, &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
}
|
||||
} else {
|
||||
user_data = User::get_from_username(string, &**pool)
|
||||
.await
|
||||
.map_err(|e| ApiError::DatabaseError(e.into()))?;
|
||||
}
|
||||
|
||||
if let Some(data) = user_data {
|
||||
let response = convert_user(data);
|
||||
@@ -160,7 +176,6 @@ pub async fn teams(
|
||||
.into_iter()
|
||||
.map(|data| crate::models::teams::TeamMember {
|
||||
user_id: data.user_id.into(),
|
||||
name: data.name,
|
||||
role: data.role,
|
||||
permissions: if same_user {
|
||||
Some(data.permissions)
|
||||
|
||||
Reference in New Issue
Block a user