1
0

Monetization status, additional files fix, deps fix (#574)

This commit is contained in:
Geometrically
2023-04-16 20:03:53 -07:00
committed by GitHub
parent 95ae981698
commit a560f6e9f6
26 changed files with 1208 additions and 1422 deletions

View File

@@ -1,4 +1,5 @@
use crate::models::ids::ProjectId;
use crate::models::projects::MonetizationStatus;
use crate::routes::ApiError;
use crate::util::guards::admin_key_guard;
use crate::DownloadQueue;
@@ -166,15 +167,17 @@ pub async fn process_payout(
let mut projects_map: HashMap<i64, Project> = HashMap::new();
use futures::TryStreamExt;
sqlx::query!(
"
SELECT m.id id, tm.user_id user_id, tm.payouts_split payouts_split, pt.name project_type
FROM mods m
INNER JOIN team_members tm on m.team_id = tm.team_id AND tm.accepted = TRUE
INNER JOIN project_types pt ON pt.id = m.project_type
WHERE m.id = ANY($1)
WHERE m.id = ANY($1) AND m.monetization_status = $2
",
&multipliers.values.keys().flat_map(|x| x.parse::<i64>().ok()).collect::<Vec<i64>>()
&multipliers.values.keys().flat_map(|x| x.parse::<i64>().ok()).collect::<Vec<i64>>(),
MonetizationStatus::Monetized.as_str(),
)
.fetch_many(&mut *transaction)
.try_for_each(|e| {

View File

@@ -278,7 +278,6 @@ pub async fn auth_callback(
payout_wallet: None,
payout_wallet_type: None,
payout_address: None,
flame_anvil_key: None,
}
.insert(&mut transaction)
.await?;

View File

@@ -4,8 +4,8 @@ use crate::database::models::thread_item::ThreadBuilder;
use crate::file_hosting::{FileHost, FileHostingError};
use crate::models::error::ApiError;
use crate::models::projects::{
DonationLink, License, ProjectId, ProjectStatus, SideType, VersionId,
VersionStatus,
DonationLink, License, MonetizationStatus, ProjectId, ProjectStatus,
SideType, VersionId, VersionStatus,
};
use crate::models::threads::ThreadType;
use crate::models::users::UserId;
@@ -802,6 +802,7 @@ async fn project_create_inner(
.collect(),
color: icon_data.and_then(|x| x.1),
thread_id,
monetization_status: MonetizationStatus::Monetized,
};
let now = Utc::now();
@@ -847,10 +848,9 @@ async fn project_create_inner(
discord_url: project_builder.discord_url.clone(),
donation_urls: project_create_data.donation_urls.clone(),
gallery: gallery_urls,
flame_anvil_project: None,
flame_anvil_user: None,
color: project_builder.color,
thread_id: Some(project_builder.thread_id.into()),
monetization_status: project_builder.monetization_status,
};
let _project_id = project_builder.insert(&mut *transaction).await?;

View File

@@ -6,7 +6,8 @@ use crate::models;
use crate::models::ids::base62_impl::parse_base62;
use crate::models::notifications::NotificationBody;
use crate::models::projects::{
DonationLink, Project, ProjectId, ProjectStatus, SearchRequest, SideType,
DonationLink, MonetizationStatus, Project, ProjectId, ProjectStatus,
SearchRequest, SideType,
};
use crate::models::teams::Permissions;
use crate::models::threads::MessageBody;
@@ -416,6 +417,7 @@ pub struct EditProject {
)]
#[validate(length(max = 65536))]
pub moderation_message_body: Option<Option<String>>,
pub monetization_status: Option<MonetizationStatus>,
}
#[patch("{id}")]
@@ -1156,6 +1158,40 @@ pub async fn project_edit(
.await?;
}
if let Some(monetization_status) = &new_project.monetization_status
{
if !perms.contains(Permissions::EDIT_DETAILS) {
return Err(ApiError::CustomAuthentication(
"You do not have the permissions to edit the monetization status of this project!"
.to_string(),
));
}
if (*monetization_status
== MonetizationStatus::ForceDemonetized
|| project_item.inner.monetization_status
== MonetizationStatus::ForceDemonetized)
&& !user.role.is_mod()
{
return Err(ApiError::CustomAuthentication(
"You do not have the permissions to edit the monetization status of this project!"
.to_string(),
));
}
sqlx::query!(
"
UPDATE mods
SET monetization_status = $1
WHERE (id = $2)
",
monetization_status.as_str(),
id as database::models::ids::ProjectId,
)
.execute(&mut *transaction)
.await?;
}
transaction.commit().await?;
Ok(HttpResponse::NoContent().body(""))
} else {

View File

@@ -264,7 +264,7 @@ pub async fn report_get(
crate::database::models::report_item::Report::get(id, &**pool).await?;
if let Some(report) = report {
if !user.role.is_mod() && report.user_id != Some(user.id.into()) {
if !user.role.is_mod() && report.reporter != user.id.into() {
return Ok(HttpResponse::NotFound().body(""));
}

View File

@@ -173,13 +173,6 @@ pub struct EditUser {
)]
#[validate]
pub payout_data: Option<Option<EditPayoutData>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
with = "::serde_with::rust::double_option"
)]
#[validate(length(min = 1, max = 40), regex = "RE_URL_SAFE")]
pub flame_anvil_key: Option<Option<String>>,
}
#[derive(Serialize, Deserialize, Validate)]
@@ -394,33 +387,6 @@ pub async fn user_edit(
}
}
if let Some(flame_anvil_key) = &new_user.flame_anvil_key {
if flame_anvil_key.is_none() {
sqlx::query!(
"
UPDATE mods
SET flame_anvil_user = NULL
WHERE (flame_anvil_user = $1)
",
id as crate::database::models::ids::UserId,
)
.execute(&mut *transaction)
.await?;
}
sqlx::query!(
"
UPDATE users
SET flame_anvil_key = $1
WHERE (id = $2)
",
flame_anvil_key.as_deref(),
id as crate::database::models::ids::UserId,
)
.execute(&mut *transaction)
.await?;
}
transaction.commit().await?;
Ok(HttpResponse::NoContent().body(""))
} else {

View File

@@ -854,6 +854,12 @@ pub async fn upload_file(
));
}
if let ValidationResult::Warning(msg) = validation_result {
if primary {
return Err(CreateError::InvalidInput(msg.to_string()));
}
}
version_files.push(VersionFileBuilder {
filename: file_name.to_string(),
url: format!("{cdn_url}/{file_path_encode}"),