Compare commits

...
Author SHA1 Message Date
Brandon Thomas 1a8f49e43e rename error 2026-05-25 15:59:03 -04:00
146 changed files with 1291 additions and 1291 deletions
@@ -1,4 +1,4 @@
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use enums::common::payments_namespace::PaymentsNamespace;
use errors::AnyhowResult;
use log::{error, info};
@@ -22,7 +22,7 @@ pub async fn attempt_wallet_deduction_else_common_web_error(
maybe_reference_token: Option<&str>,
amount_to_deduct: u64,
connection: &mut PoolConnection<MySql>
) -> Result<WalletDeductionResult, AdvancedCommonWebError> {
) -> Result<WalletDeductionResult, CommonWebError> {
let result = try_wallet_deduction(
user_token,
@@ -37,23 +37,23 @@ pub async fn attempt_wallet_deduction_else_common_web_error(
Err(err) => Err(match err {
WalletSpendError::InvalidAmountToSpend => {
log::error!("invalid spend amount charged");
AdvancedCommonWebError::PaymentRequired
CommonWebError::PaymentRequired
}
WalletSpendError::InsufficientBalance { requested_to_spend_amount, available_amount } => {
log::error!("payment is required - requested: {}, available: {}", requested_to_spend_amount, available_amount);
AdvancedCommonWebError::PaymentRequired
CommonWebError::PaymentRequired
}
WalletSpendError::SelectError(err) => {
log::error!("SQL error (select) in attempt_wallet_deduction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
}
WalletSpendError::SelectOptionalError(err) => {
log::error!("SQL error (select optional) in attempt_wallet_deduction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
}
WalletSpendError::SqlxError(err) => {
log::error!("SQL error (sqlx) in attempt_wallet_deduction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
}
}),
}
@@ -16,13 +16,13 @@ use mysql_queries::errors::mysql_error::{MysqlCrateErrorSubtype, MysqlError};
/// ## Usage
///
/// ```ignore
/// pub async fn my_handler(...) -> Result<Json<MyResponse>, AdvancedCommonWebError> {
/// pub async fn my_handler(...) -> Result<Json<MyResponse>, CommonWebError> {
/// // sqlx errors, anyhow errors, session errors — all convert via ?
/// let user = require_user_session_using_connection(&req, ...)?;
/// let data = some_db_query(&pool).await?;
///
/// if data.is_none() {
/// return Err(AdvancedCommonWebError::NotFound);
/// return Err(CommonWebError::NotFound);
/// }
///
/// Ok(Json(MyResponse { data }))
@@ -33,7 +33,7 @@ use mysql_queries::errors::mysql_error::{MysqlCrateErrorSubtype, MysqlError};
/// The wrapped cause is never shown to users but is available to the error
/// alerting middleware for paging and logging.
#[derive(Clone)]
pub enum AdvancedCommonWebError {
pub enum CommonWebError {
/// 400 Bad Request with a user-facing message.
BadInputWithSimpleMessage(String),
@@ -72,7 +72,7 @@ pub enum AdvancedCommonWebError {
// =============== Public accessors ===============
impl AdvancedCommonWebError {
impl CommonWebError {
/// Wrap any error as an `UncaughtServerError`.
pub fn from_error(error: impl std::error::Error + Send + Sync + 'static) -> Self {
Self::UncaughtServerError(Arc::new(error))
@@ -127,7 +127,7 @@ impl AdvancedCommonWebError {
// =============== Display / Debug / Error ===============
impl Display for AdvancedCommonWebError {
impl Display for CommonWebError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
Self::BadInputWithSimpleMessage(msg) => write!(f, "Bad input: {}", msg),
@@ -145,7 +145,7 @@ impl Display for AdvancedCommonWebError {
}
}
impl std::fmt::Debug for AdvancedCommonWebError {
impl std::fmt::Debug for CommonWebError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
Self::BadInputWithSimpleMessage(msg) => write!(f, "BadInputWithSimpleMessage({:?})", msg),
@@ -163,7 +163,7 @@ impl std::fmt::Debug for AdvancedCommonWebError {
}
}
impl std::error::Error for AdvancedCommonWebError {
impl std::error::Error for CommonWebError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::UncaughtServerError(err) => Some(err.as_ref()),
@@ -175,7 +175,7 @@ impl std::error::Error for AdvancedCommonWebError {
// =============== Actix ResponseError ===============
impl ResponseError for AdvancedCommonWebError {
impl ResponseError for CommonWebError {
fn status_code(&self) -> StatusCode {
match self {
Self::BadInputWithSimpleMessage(_) => StatusCode::BAD_REQUEST,
@@ -235,13 +235,13 @@ impl ResponseError for AdvancedCommonWebError {
// =============== From impls (automatic ? conversion) ===============
impl From<sqlx::Error> for AdvancedCommonWebError {
impl From<sqlx::Error> for CommonWebError {
fn from(err: sqlx::Error) -> Self {
Self::from_error(err)
}
}
impl<T> From<MysqlError<T>> for AdvancedCommonWebError
impl<T> From<MysqlError<T>> for CommonWebError
where
T: MysqlCrateErrorSubtype + Send + Sync + 'static,
{
@@ -250,7 +250,7 @@ where
}
}
impl From<anyhow::Error> for AdvancedCommonWebError {
impl From<anyhow::Error> for CommonWebError {
fn from(err: anyhow::Error) -> Self {
// anyhow::Error doesn't impl std::error::Error, so we go through Box -> Arc.
let boxed: Box<dyn std::error::Error + Send + Sync> = err.into();
@@ -258,13 +258,13 @@ impl From<anyhow::Error> for AdvancedCommonWebError {
}
}
impl From<serde_json::Error> for AdvancedCommonWebError {
impl From<serde_json::Error> for CommonWebError {
fn from(err: serde_json::Error) -> Self {
Self::from_error(err)
}
}
impl From<RequireUserSessionError> for AdvancedCommonWebError {
impl From<RequireUserSessionError> for CommonWebError {
fn from(value: RequireUserSessionError) -> Self {
match value {
RequireUserSessionError::NotAuthorized => Self::NotAuthorized,
@@ -273,7 +273,7 @@ impl From<RequireUserSessionError> for AdvancedCommonWebError {
}
}
impl From<HttpUserSessionPayloadError> for AdvancedCommonWebError {
impl From<HttpUserSessionPayloadError> for CommonWebError {
fn from(err: HttpUserSessionPayloadError) -> Self {
if err.is_server_error() {
Self::from_error(err)
@@ -283,7 +283,7 @@ impl From<HttpUserSessionPayloadError> for AdvancedCommonWebError {
}
}
impl From<AvtCookiePayloadError> for AdvancedCommonWebError {
impl From<AvtCookiePayloadError> for CommonWebError {
fn from(err: AvtCookiePayloadError) -> Self {
if err.is_server_error() {
Self::from_error(err)
@@ -293,7 +293,7 @@ impl From<AvtCookiePayloadError> for AdvancedCommonWebError {
}
}
impl From<SessionCheckerError> for AdvancedCommonWebError {
impl From<SessionCheckerError> for CommonWebError {
fn from(value: SessionCheckerError) -> Self {
match value {
// Bad / forged session cookie → 401 (don't page on this)
@@ -327,7 +327,7 @@ struct JsonErrorWithMessage<'a> {
// =============== OpenAPI schema ===============
impl utoipa::PartialSchema for AdvancedCommonWebError {
impl utoipa::PartialSchema for CommonWebError {
fn schema() -> utoipa::openapi::RefOr<utoipa::openapi::Schema> {
utoipa::openapi::ObjectBuilder::new()
.property(
@@ -360,9 +360,9 @@ impl utoipa::PartialSchema for AdvancedCommonWebError {
}
}
impl utoipa::ToSchema for AdvancedCommonWebError {
impl utoipa::ToSchema for CommonWebError {
fn name() -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Borrowed("AdvancedCommonWebError")
std::borrow::Cow::Borrowed("CommonWebError")
}
}
@@ -375,7 +375,7 @@ mod tests {
#[test]
fn bad_input_returns_400_with_message() {
let error = AdvancedCommonWebError::BadInputWithSimpleMessage("name is required".to_string());
let error = CommonWebError::BadInputWithSimpleMessage("name is required".to_string());
assert_eq!(error.status_code(), StatusCode::BAD_REQUEST);
assert!(!error.is_server_error());
assert!(error.cause().is_none());
@@ -389,27 +389,27 @@ mod tests {
#[test]
fn not_found_returns_404() {
let error = AdvancedCommonWebError::NotFound;
let error = CommonWebError::NotFound;
assert_eq!(error.status_code(), StatusCode::NOT_FOUND);
assert!(!error.is_server_error());
}
#[test]
fn not_authorized_returns_401() {
let error = AdvancedCommonWebError::NotAuthorized;
let error = CommonWebError::NotAuthorized;
assert_eq!(error.status_code(), StatusCode::UNAUTHORIZED);
}
#[test]
fn payment_required_returns_402() {
let error = AdvancedCommonWebError::PaymentRequired;
let error = CommonWebError::PaymentRequired;
assert_eq!(error.status_code(), StatusCode::PAYMENT_REQUIRED);
}
#[test]
fn uncaught_io_error_returns_500_and_hides_cause() {
let io_err = std::io::Error::new(std::io::ErrorKind::Other, "disk exploded");
let error = AdvancedCommonWebError::from_error(io_err);
let error = CommonWebError::from_error(io_err);
assert_eq!(error.status_code(), StatusCode::INTERNAL_SERVER_ERROR);
assert!(error.is_server_error());
@@ -428,7 +428,7 @@ mod tests {
#[test]
fn anyhow_error_converts_to_500_via_from() {
let error: AdvancedCommonWebError = anyhow::anyhow!("something broke in the pipeline").into();
let error: CommonWebError = anyhow::anyhow!("something broke in the pipeline").into();
assert_eq!(error.status_code(), StatusCode::INTERNAL_SERVER_ERROR);
assert!(error.is_server_error());
@@ -440,7 +440,7 @@ mod tests {
fn nested_anyhow_error_preserves_context_chain() {
let inner = std::io::Error::new(std::io::ErrorKind::ConnectionRefused, "connection refused");
let with_context = anyhow::Error::new(inner).context("failed to connect to database");
let error: AdvancedCommonWebError = with_context.into();
let error: CommonWebError = with_context.into();
assert!(error.is_server_error());
let cause = error.cause().unwrap();
@@ -454,14 +454,14 @@ mod tests {
#[test]
fn require_user_session_not_authorized_maps_to_401() {
let error: AdvancedCommonWebError = RequireUserSessionError::NotAuthorized.into();
let error: CommonWebError = RequireUserSessionError::NotAuthorized.into();
assert_eq!(error.status_code(), StatusCode::UNAUTHORIZED);
assert!(!error.is_server_error());
}
#[test]
fn require_user_session_server_error_wraps_cause() {
let error: AdvancedCommonWebError = RequireUserSessionError::ServerError.into();
let error: CommonWebError = RequireUserSessionError::ServerError.into();
assert_eq!(error.status_code(), StatusCode::INTERNAL_SERVER_ERROR);
assert!(error.is_server_error());
assert!(error.cause().is_some());
@@ -472,7 +472,7 @@ mod tests {
fn serde_json_error_converts_to_500() {
let bad_json = "not json at all{{{";
let serde_err: serde_json::Error = serde_json::from_str::<serde_json::Value>(bad_json).unwrap_err();
let error: AdvancedCommonWebError = serde_err.into();
let error: CommonWebError = serde_err.into();
assert_eq!(error.status_code(), StatusCode::INTERNAL_SERVER_ERROR);
assert!(error.is_server_error());
@@ -483,7 +483,7 @@ mod tests {
#[test]
fn error_source_returns_wrapped_error() {
let io_err = std::io::Error::new(std::io::ErrorKind::Other, "root cause");
let error = AdvancedCommonWebError::from_error(io_err);
let error = CommonWebError::from_error(io_err);
let source = std::error::Error::source(&error);
assert!(source.is_some());
@@ -492,31 +492,31 @@ mod tests {
#[test]
fn non_server_errors_have_no_source() {
assert!(std::error::Error::source(&AdvancedCommonWebError::NotFound).is_none());
assert!(std::error::Error::source(&AdvancedCommonWebError::NotAuthorized).is_none());
assert!(std::error::Error::source(&AdvancedCommonWebError::PaymentRequired).is_none());
assert!(std::error::Error::source(&AdvancedCommonWebError::Forbidden).is_none());
assert!(std::error::Error::source(&AdvancedCommonWebError::ContentPolicyRejected).is_none());
assert!(std::error::Error::source(&AdvancedCommonWebError::ContentPolicyRejectedWithMessage("test".to_string())).is_none());
assert!(std::error::Error::source(&CommonWebError::NotFound).is_none());
assert!(std::error::Error::source(&CommonWebError::NotAuthorized).is_none());
assert!(std::error::Error::source(&CommonWebError::PaymentRequired).is_none());
assert!(std::error::Error::source(&CommonWebError::Forbidden).is_none());
assert!(std::error::Error::source(&CommonWebError::ContentPolicyRejected).is_none());
assert!(std::error::Error::source(&CommonWebError::ContentPolicyRejectedWithMessage("test".to_string())).is_none());
}
#[test]
fn forbidden_returns_403() {
let error = AdvancedCommonWebError::Forbidden;
let error = CommonWebError::Forbidden;
assert_eq!(error.status_code(), StatusCode::FORBIDDEN);
assert!(!error.is_server_error());
}
#[test]
fn content_policy_rejected_returns_403() {
let error = AdvancedCommonWebError::ContentPolicyRejected;
let error = CommonWebError::ContentPolicyRejected;
assert_eq!(error.status_code(), StatusCode::FORBIDDEN);
assert!(!error.is_server_error());
}
#[test]
fn content_policy_rejected_with_message_returns_403() {
let error = AdvancedCommonWebError::ContentPolicyRejectedWithMessage("NSFW detected".to_string());
let error = CommonWebError::ContentPolicyRejectedWithMessage("NSFW detected".to_string());
assert_eq!(error.status_code(), StatusCode::FORBIDDEN);
assert!(!error.is_server_error());
@@ -1,4 +1,4 @@
pub mod advanced_common_web_error;
pub mod common_web_error;
pub mod media;
pub mod media_file_origin_details;
pub mod media_file_social_meta_lite;
@@ -1,4 +1,4 @@
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use log::{error, info};
use mysql_queries::queries::wallets::refund::try_to_refund_ledger_entry::{try_to_refund_ledger_entry, WalletRefundOutcome};
use sqlx::Acquire;
@@ -7,13 +7,13 @@ use tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken;
pub async fn refund_wallet_after_api_failure(
ledger_entry_token: &WalletLedgerEntryToken,
connection: &mut sqlx::pool::PoolConnection<sqlx::MySql>,
) -> Result<(), AdvancedCommonWebError> {
) -> Result<(), CommonWebError> {
let mut transaction = connection.begin().await.map_err(|err| {
error!(
"Failed to begin refund transaction after API failure (ledger {}): {:?}",
ledger_entry_token.as_str(), err
);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
match try_to_refund_ledger_entry(ledger_entry_token, &mut transaction).await {
@@ -29,7 +29,7 @@ pub async fn refund_wallet_after_api_failure(
"Failed to commit refund after API failure (ledger {}): {:?}",
ledger_entry_token.as_str(), err
);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
Ok(WalletRefundOutcome::AlreadyRefunded) => {
@@ -45,7 +45,7 @@ pub async fn refund_wallet_after_api_failure(
ledger_entry_token.as_str(), err
);
let _ = transaction.rollback().await;
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
}
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::state::server_state::ServerState;
use actix_helpers::extractors::get_request_user_agent::get_request_user_agent;
use actix_web::web::{Json, Query};
@@ -33,7 +33,7 @@ pub async fn log_app_active_user_handler(
http_request: HttpRequest,
request: Query<LogAppActiveUserRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<LogAppActiveUserResponse>, AdvancedCommonWebError>
) -> Result<Json<LogAppActiveUserResponse>, CommonWebError>
{
let mut mysql_connection = server_state.mysql_pool
.acquire()
@@ -45,7 +45,7 @@ pub async fn log_app_active_user_handler(
.await?;
let user_token = maybe_user_session
.ok_or(AdvancedCommonWebError::NotAuthorized)?
.ok_or(CommonWebError::NotAuthorized)?
.user_token;
let ip_address = get_request_ip(&http_request);
@@ -143,10 +143,10 @@ pub async fn log_app_active_user_handler(
}))
}
fn validate_app_session_token_format(app_session_token: &AppSessionToken) -> Result<(), AdvancedCommonWebError> {
fn validate_app_session_token_format(app_session_token: &AppSessionToken) -> Result<(), CommonWebError> {
if !app_session_token.as_str().starts_with(AppSessionToken::token_prefix()) {
warn!("App session token has invalid prefix: {}", app_session_token.as_str());
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Invalid app session token format".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Invalid app session token format".to_string()));
}
Ok(())
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::state::server_state::ServerState;
use actix_helpers::extractors::get_request_user_agent::get_request_user_agent;
use actix_web::web::Json;
@@ -29,7 +29,7 @@ pub async fn log_app_active_user_json_handler(
http_request: HttpRequest,
request: Json<LogAppActiveUserRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<LogAppActiveUserResponse>, AdvancedCommonWebError>
) -> Result<Json<LogAppActiveUserResponse>, CommonWebError>
{
let mut mysql_connection = server_state.mysql_pool
.acquire()
@@ -41,7 +41,7 @@ pub async fn log_app_active_user_json_handler(
.await?;
let user_token = maybe_user_session
.ok_or(AdvancedCommonWebError::NotAuthorized)?
.ok_or(CommonWebError::NotAuthorized)?
.user_token;
let ip_address = get_request_ip(&http_request);
@@ -139,10 +139,10 @@ pub async fn log_app_active_user_json_handler(
}))
}
fn validate_app_session_token_format(app_session_token: &AppSessionToken) -> Result<(), AdvancedCommonWebError> {
fn validate_app_session_token_format(app_session_token: &AppSessionToken) -> Result<(), CommonWebError> {
if !app_session_token.as_str().starts_with(AppSessionToken::token_prefix()) {
warn!("App session token has invalid prefix: {}", app_session_token.as_str());
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Invalid app session token format".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Invalid app session token format".to_string()));
}
Ok(())
@@ -5,7 +5,7 @@ use enums::common::payments_namespace::PaymentsNamespace;
use log::warn;
use utoipa::ToSchema;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
// =============== Response ===============
@@ -38,17 +38,17 @@ pub struct SubscriptionProductKey {
pub async fn list_active_user_subscriptions_handler(
http_request: HttpRequest,
internal_user_lookup: web::Data<dyn InternalUserLookup>,
) -> Result<Json<ListActiveUserSubscriptionsResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListActiveUserSubscriptionsResponse>, CommonWebError> {
let maybe_user_metadata = internal_user_lookup
.lookup_user_from_http_request(&http_request)
.await
.map_err(|err| {
warn!("Error looking up user: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let user_metadata = match maybe_user_metadata {
None => return Err(AdvancedCommonWebError::NotAuthorized),
None => return Err(CommonWebError::NotAuthorized),
Some(user_metadata) => user_metadata,
};
@@ -23,7 +23,7 @@ use seedance2pro_client::requests::upload_file::upload_file::{upload_file, Uploa
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use url_utils::extension::extract_extension_from_url::{extract_extension_from_url, ExtractExtensions};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
use crate::util::http_download_url_to_bytes::http_download_url_to_bytes;
@@ -50,7 +50,7 @@ pub async fn create_character_handler(
http_request: HttpRequest,
request: Json<CreateCharacterRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<CreateCharacterResponse>, AdvancedCommonWebError> {
) -> Result<Json<CreateCharacterResponse>, CommonWebError> {
// --- Auth ---
@@ -64,12 +64,12 @@ pub async fn create_character_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from(e)
CommonWebError::from(e)
})?;
let user_session = match maybe_user_session {
Some(session) => session,
None => return Err(AdvancedCommonWebError::NotAuthorized),
None => return Err(CommonWebError::NotAuthorized),
};
let user_token = &user_session.user_token;
@@ -78,7 +78,7 @@ pub async fn create_character_handler(
// --- Validate input ---
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
// For now we use the model name as the character name and description.
@@ -89,7 +89,7 @@ pub async fn create_character_handler(
if let Some(desc) = character_description {
if desc.len() > CHARACTER_MAX_DESCRIPTION_LENGTH {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
format!("Description exceeds maximum length of {} characters.", CHARACTER_MAX_DESCRIPTION_LENGTH),
));
}
@@ -108,7 +108,7 @@ pub async fn create_character_handler(
.get(&request.image_media_token)
.ok_or_else(|| {
warn!("Image media token not found: {:?}", request.image_media_token);
AdvancedCommonWebError::BadInputWithSimpleMessage("Image media file not found.".to_string())
CommonWebError::BadInputWithSimpleMessage("Image media file not found.".to_string())
})?;
// --- Insert idempotency token ---
@@ -117,7 +117,7 @@ pub async fn create_character_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// --- Upload image to Kinovi CDN ---
@@ -148,7 +148,7 @@ pub async fn create_character_handler(
.await
.map_err(|err| {
error!("Error calling Kinovi generate_character: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!(
@@ -167,7 +167,7 @@ pub async fn create_character_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let character_token = create_pending_character(CreatePendingCharacterArgs {
@@ -204,7 +204,7 @@ pub async fn create_character_handler(
.await
.map_err(|err| {
error!("Error inserting inference job: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!("Created inference job: {}", apriori_job_token);
@@ -214,7 +214,7 @@ pub async fn create_character_handler(
.await
.map_err(|err| {
error!("Error committing transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(CreateCharacterResponse {
@@ -229,7 +229,7 @@ pub async fn create_character_handler(
async fn upload_to_kinovi(
cookies: &str,
our_cdn_url: &url::Url,
) -> Result<String, AdvancedCommonWebError> {
) -> Result<String, CommonWebError> {
let extension = extract_extension_from_url(our_cdn_url, &ExtractExtensions::All)
.map(|ext| ext.without_period().to_string())
.unwrap_or_else(|| "png".to_string());
@@ -240,7 +240,7 @@ async fn upload_to_kinovi(
.await
.map_err(|err| {
warn!("Error downloading media file from CDN: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?
.to_vec();
@@ -252,7 +252,7 @@ async fn upload_to_kinovi(
.await
.map_err(|err| {
warn!("Error preparing Kinovi file upload: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let upload_result = upload_file(UploadFileArgs {
@@ -263,7 +263,7 @@ async fn upload_to_kinovi(
.await
.map_err(|err| {
warn!("Error uploading file to Kinovi: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(upload_result.public_url)
@@ -9,7 +9,7 @@ use tokens::tokens::characters::CharacterToken;
use mysql_queries::queries::characters::delete_character::delete_character;
use mysql_queries::queries::characters::get_character_by_token_including_deleted::get_character_by_token_including_deleted;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_user_session_using_connection::require_user_session_using_connection;
use crate::state::server_state::ServerState;
@@ -32,7 +32,7 @@ pub async fn delete_character_handler(
http_request: HttpRequest,
path: Path<DeleteCharacterPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<DeleteCharacterResponse>, AdvancedCommonWebError> {
) -> Result<Json<DeleteCharacterResponse>, CommonWebError> {
let character_token = &path.character_token;
@@ -55,7 +55,7 @@ pub async fn delete_character_handler(
.await?
.ok_or_else(|| {
warn!("Character not found: {}", character_token);
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
// Already deleted — return success idempotently.
@@ -76,7 +76,7 @@ pub async fn delete_character_handler(
"User {} attempted to delete character {} owned by {:?}",
user_token, character_token, character.maybe_creator_user_token,
);
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
// --- Soft delete ---
@@ -10,7 +10,7 @@ use mysql_queries::queries::characters::update_character_name_and_description::u
use seedance2pro_client::creds::seedance2pro_session::Seedance2ProSession;
use seedance2pro_client::requests::update_character::update_character::{update_character, UpdateCharacterArgs};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_user_session_using_connection::require_user_session_using_connection;
use crate::state::server_state::ServerState;
@@ -32,7 +32,7 @@ pub async fn edit_character_handler(
http_request: HttpRequest,
request: Json<EditCharacterRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<EditCharacterResponse>, AdvancedCommonWebError> {
) -> Result<Json<EditCharacterResponse>, CommonWebError> {
// --- Auth ---
@@ -53,7 +53,7 @@ pub async fn edit_character_handler(
.await?
.ok_or_else(|| {
warn!("Character not found: {}", request.token);
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
// --- Ownership check ---
@@ -65,7 +65,7 @@ pub async fn edit_character_handler(
if !is_owner && !is_mod {
warn!("User {} tried to edit character {} they don't own", user_token, request.token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
}
// --- Determine what to update ---
@@ -114,7 +114,7 @@ pub async fn edit_character_handler(
.await
.map_err(|err| {
error!("Error updating character on Kinovi: {:?}", err);
AdvancedCommonWebError::from_error_with_message(
CommonWebError::from_error_with_message(
"Error Updating Kinovi Character API".to_string(),
err,
)
@@ -166,7 +166,7 @@ fn resolve_name_update(updated_name: &Option<String>) -> Option<String> {
/// Determine the description update type.
fn resolve_description_update(
updated_description: &Option<String>,
) -> Result<DescriptionUpdateType, AdvancedCommonWebError> {
) -> Result<DescriptionUpdateType, CommonWebError> {
let desc = match updated_description.as_ref() {
None => return Ok(DescriptionUpdateType::NoUpdate),
Some(d) => d,
@@ -176,7 +176,7 @@ fn resolve_description_update(
if trimmed.is_empty() {
Ok(DescriptionUpdateType::Nullify)
} else if trimmed.len() > CHARACTER_MAX_DESCRIPTION_LENGTH {
Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
Err(CommonWebError::BadInputWithSimpleMessage(
format!("Description exceeds maximum length of {} characters.", CHARACTER_MAX_DESCRIPTION_LENGTH),
))
} else {
@@ -13,7 +13,7 @@ use mysql_queries::queries::media_files::get::batch_get_media_files_by_tokens::{
use tokens::tokens::characters::CharacterToken;
use tokens::tokens::media_files::MediaFileToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_domain::MediaDomain;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -37,7 +37,7 @@ pub async fn get_character_handler(
http_request: HttpRequest,
path: Path<GetCharacterPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<GetCharacterResponse>, AdvancedCommonWebError> {
) -> Result<Json<GetCharacterResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -45,7 +45,7 @@ pub async fn get_character_handler(
.await?
.ok_or_else(|| {
warn!("Character not found: {}", path.character_token);
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
// --- Resolve media links ---
@@ -12,7 +12,7 @@ use mysql_queries::queries::characters::list_active_characters_for_user::list_ac
use mysql_queries::queries::media_files::get::batch_get_media_files_by_tokens::{batch_get_media_files_by_tokens_with_connection, MediaFilesByTokensRecord};
use tokens::tokens::media_files::MediaFileToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_domain::MediaDomain;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -35,7 +35,7 @@ pub async fn list_characters_handler(
http_request: HttpRequest,
query: Query<ListCharactersQuery>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListCharactersResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListCharactersResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -1,7 +1,7 @@
use std::fmt;
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::state::server_state::ServerState;
use actix_web::web::{Json, Path};
@@ -38,14 +38,14 @@ pub async fn get_session_credits_handler(
http_request: HttpRequest,
path: Path<GetSessionCreditsPathInfo>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GetSessionCreditsResponse>, AdvancedCommonWebError>
) -> Result<Json<GetSessionCreditsResponse>, CommonWebError>
{
let mut mysql_connection = server_state.mysql_pool
.acquire()
.await
.map_err(|err| {
error!("Error acquiring MySQL connection: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_user_session = server_state
@@ -54,12 +54,12 @@ pub async fn get_session_credits_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let user_token = match maybe_user_session {
Some(session) => session.user_token,
None => return Err(AdvancedCommonWebError::NotAuthorized),
None => return Err(CommonWebError::NotAuthorized),
};
let maybe_wallet = find_primary_wallet_for_owner_using_connection(
@@ -68,7 +68,7 @@ pub async fn get_session_credits_handler(
&mut mysql_connection,
).await.map_err(|err| {
error!("Error finding primary wallet for user: {:?}, error: {:?}", user_token, err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let free_credits = 0u64;
@@ -1,10 +1,10 @@
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
pub fn payments_error_test(prompt: &str) -> Result<(), AdvancedCommonWebError> {
pub fn payments_error_test(prompt: &str) -> Result<(), CommonWebError> {
let prompt = prompt.trim().to_ascii_lowercase();
if prompt == "trigger_payment_failure" {
return Err(AdvancedCommonWebError::PaymentRequired);
return Err(CommonWebError::PaymentRequired);
}
Ok(())
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoint_helpers::refund_wallet_after_api_failure::refund_wallet_after_api_failure;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -44,10 +44,10 @@ pub async fn flux_2_lora_edit_image_angle_handler(
http_request: HttpRequest,
request: Json<Flux2LoraEditImageAngleRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Flux2LoraEditImageAngleResponse>, AdvancedCommonWebError> {
) -> Result<Json<Flux2LoraEditImageAngleResponse>, CommonWebError> {
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -60,7 +60,7 @@ pub async fn flux_2_lora_edit_image_angle_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -70,7 +70,7 @@ pub async fn flux_2_lora_edit_image_angle_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -84,14 +84,14 @@ pub async fn flux_2_lora_edit_image_angle_handler(
).await?
.ok_or_else(|| {
warn!("No image URLs found for media token");
AdvancedCommonWebError::BadInputWithSimpleMessage("Image media token not found".to_string())
CommonWebError::BadInputWithSimpleMessage("Image media token not found".to_string())
})?;
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -148,14 +148,14 @@ pub async fn flux_2_lora_edit_image_angle_handler(
Err(err) => {
warn!("Error calling enqueue_flux_2_lora_edit_image_angle_webhook: {:?}", err);
refund_wallet_after_api_failure(&wallet_deduction.ledger_entry_token, &mut mysql_connection).await?;
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -167,7 +167,7 @@ pub async fn flux_2_lora_edit_image_angle_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let prompt_result = insert_prompt(InsertPromptArgs {
@@ -251,7 +251,7 @@ pub async fn flux_2_lora_edit_image_angle_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -260,7 +260,7 @@ pub async fn flux_2_lora_edit_image_angle_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Flux2LoraEditImageAngleResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoint_helpers::refund_wallet_after_api_failure::refund_wallet_after_api_failure;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -44,10 +44,10 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
http_request: HttpRequest,
request: Json<QwenEdit2511EditImageAngleRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<QwenEdit2511EditImageAngleResponse>, AdvancedCommonWebError> {
) -> Result<Json<QwenEdit2511EditImageAngleResponse>, CommonWebError> {
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -60,7 +60,7 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -70,7 +70,7 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -84,14 +84,14 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
).await?
.ok_or_else(|| {
warn!("No image URLs found for media token");
AdvancedCommonWebError::BadInputWithSimpleMessage("Image media token not found".to_string())
CommonWebError::BadInputWithSimpleMessage("Image media token not found".to_string())
})?;
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -149,14 +149,14 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
Err(err) => {
warn!("Error calling enqueue_qwen_edit_2511_edit_image_angle_webhook: {:?}", err);
refund_wallet_after_api_failure(&wallet_deduction.ledger_entry_token, &mut mysql_connection).await?;
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -168,7 +168,7 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let prompt_result = insert_prompt(InsertPromptArgs {
@@ -252,7 +252,7 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -261,7 +261,7 @@ pub async fn qwen_edit_2511_edit_image_angle_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(QwenEdit2511EditImageAngleResponse {
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
@@ -39,7 +39,7 @@ pub async fn remove_image_background_handler(
http_request: HttpRequest,
request: Json<RemoveImageBackgroundRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<RemoveImageBackgroundResponse>, AdvancedCommonWebError> {
) -> Result<Json<RemoveImageBackgroundResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool
.acquire()
.await?;
@@ -50,7 +50,7 @@ pub async fn remove_image_background_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -71,19 +71,19 @@ pub async fn remove_image_background_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -97,16 +97,16 @@ pub async fn remove_image_background_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -135,13 +135,13 @@ pub async fn remove_image_background_handler(
.await
.map_err(|err| {
warn!("Error calling remove_background_rembg_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -167,7 +167,7 @@ pub async fn remove_image_background_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -47,7 +47,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
http_request: HttpRequest,
request: Json<FluxProKontextMaxEditImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<FluxProKontextMaxEditImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<FluxProKontextMaxEditImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -61,7 +61,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -71,7 +71,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -81,12 +81,12 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
const CAN_SEE_DELETED: bool = false;
@@ -106,7 +106,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
@@ -114,7 +114,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
Some(file) => file,
None => {
warn!("No media files found for tokens: {:?}", media_tokens);
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"No media files found for provided tokens".to_string()));
}
};
@@ -139,7 +139,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
//// TODO: This is test code
@@ -188,13 +188,13 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_pro_kontext_max_edit_webook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -206,7 +206,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -285,7 +285,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -294,7 +294,7 @@ pub async fn flux_pro_kontext_max_edit_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(FluxProKontextMaxEditImageResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -51,12 +51,12 @@ pub async fn gemini_25_flash_edit_image_handler(
http_request: HttpRequest,
request: Json<Gemini25FlashEditImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Gemini25FlashEditImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<Gemini25FlashEditImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -69,7 +69,7 @@ pub async fn gemini_25_flash_edit_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -79,7 +79,7 @@ pub async fn gemini_25_flash_edit_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -89,7 +89,7 @@ pub async fn gemini_25_flash_edit_image_handler(
Some(tokens) => tokens,
None => {
warn!("No image media tokens provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No image media tokens provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No image media tokens provided".to_string()));
}
};
@@ -103,13 +103,13 @@ pub async fn gemini_25_flash_edit_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if media_files.len() != tokens.len() {
warn!("Wrong number of media files returned for tokens: {} found for {} tokens", media_files.len(), tokens.len());
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
format!("Not all media files could be found. Media files found: {}, tokens provided: {}",
media_files.len(), tokens.len())));
}
@@ -136,7 +136,7 @@ pub async fn gemini_25_flash_edit_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -176,13 +176,13 @@ pub async fn gemini_25_flash_edit_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gpt_image_1_edit_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -194,7 +194,7 @@ pub async fn gemini_25_flash_edit_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -276,7 +276,7 @@ pub async fn gemini_25_flash_edit_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -285,7 +285,7 @@ pub async fn gemini_25_flash_edit_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Gemini25FlashEditImageResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -53,12 +53,12 @@ pub async fn gpt_image_1_edit_image_handler(
http_request: HttpRequest,
request: Json<GptImage1EditImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GptImage1EditImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GptImage1EditImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -71,7 +71,7 @@ pub async fn gpt_image_1_edit_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -81,7 +81,7 @@ pub async fn gpt_image_1_edit_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -91,7 +91,7 @@ pub async fn gpt_image_1_edit_image_handler(
Some(tokens) => tokens,
None => {
warn!("No image media tokens provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No image media tokens provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No image media tokens provided".to_string()));
}
};
@@ -105,13 +105,13 @@ pub async fn gpt_image_1_edit_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if media_files.len() != tokens.len() {
warn!("Wrong number of media files returned for tokens: {} found for {} tokens", media_files.len(), tokens.len());
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
format!("Not all media files could be found. Media files found: {}, tokens provided: {}",
media_files.len(), tokens.len())));
}
@@ -138,7 +138,7 @@ pub async fn gpt_image_1_edit_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -201,13 +201,13 @@ pub async fn gpt_image_1_edit_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gpt_image_1_edit_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -219,7 +219,7 @@ pub async fn gpt_image_1_edit_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -308,7 +308,7 @@ pub async fn gpt_image_1_edit_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -317,7 +317,7 @@ pub async fn gpt_image_1_edit_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GptImage1EditImageResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -50,7 +50,7 @@ pub async fn qwen_edit_image_handler(
http_request: HttpRequest,
request: Json<QwenEditImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<QwenEditImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<QwenEditImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -64,7 +64,7 @@ pub async fn qwen_edit_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -74,12 +74,12 @@ pub async fn qwen_edit_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
const CAN_SEE_DELETED: bool = false;
@@ -99,7 +99,7 @@ pub async fn qwen_edit_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
@@ -107,7 +107,7 @@ pub async fn qwen_edit_image_handler(
Some(file) => file,
None => {
warn!("No media files found for tokens: {:?}", media_tokens);
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"No media files found for provided tokens".to_string()));
}
};
@@ -132,7 +132,7 @@ pub async fn qwen_edit_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -181,13 +181,13 @@ pub async fn qwen_edit_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_qwen_image_edit_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -199,7 +199,7 @@ pub async fn qwen_edit_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -281,7 +281,7 @@ pub async fn qwen_edit_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -290,7 +290,7 @@ pub async fn qwen_edit_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(QwenEditImageResponse {
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -46,7 +46,7 @@ pub async fn seededit_3_edit_image_handler(
http_request: HttpRequest,
request: Json<SeedEdit3EditImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<SeedEdit3EditImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<SeedEdit3EditImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -60,7 +60,7 @@ pub async fn seededit_3_edit_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -73,12 +73,12 @@ pub async fn seededit_3_edit_image_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
const CAN_SEE_DELETED: bool = false;
@@ -98,7 +98,7 @@ pub async fn seededit_3_edit_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
@@ -106,7 +106,7 @@ pub async fn seededit_3_edit_image_handler(
Some(file) => file,
None => {
warn!("No media files found for tokens: {:?}", media_tokens);
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"No media files found for provided tokens".to_string()));
}
};
@@ -131,7 +131,7 @@ pub async fn seededit_3_edit_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -149,13 +149,13 @@ pub async fn seededit_3_edit_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_seededit_v3_image_edit_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -167,7 +167,7 @@ pub async fn seededit_3_edit_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -238,7 +238,7 @@ pub async fn seededit_3_edit_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -247,7 +247,7 @@ pub async fn seededit_3_edit_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(SeedEdit3EditImageResponse {
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -46,7 +46,7 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
http_request: HttpRequest,
request: Json<FluxDevJuggernautInpaintImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<FluxDevJuggernautInpaintImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<FluxDevJuggernautInpaintImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -60,7 +60,7 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -73,12 +73,12 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
const CAN_SEE_DELETED: bool = false;
@@ -98,13 +98,13 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if media_files.len() != media_tokens.len() {
warn!("Wrong number of media files returned for tokens: {} found for {} tokens", media_files.len(), media_tokens.len());
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
format!("Not all media files could be found. Media files found: {}, tokens provided: {}",
media_files.len(), media_tokens.len())));
}
@@ -115,14 +115,14 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
.find(|file| file.token == request.image_media_token)
.ok_or_else(|| {
warn!("Image media file not found for token: {}", request.image_media_token);
AdvancedCommonWebError::BadInputWithSimpleMessage("Image media file not found".to_string())
CommonWebError::BadInputWithSimpleMessage("Image media file not found".to_string())
})?;
let mask_media_file = media_files.iter()
.find(|file| file.token == request.mask_media_token)
.ok_or_else(|| {
warn!("Mask media file not found for token: {}", request.mask_media_token);
AdvancedCommonWebError::BadInputWithSimpleMessage("Mask media file not found".to_string())
CommonWebError::BadInputWithSimpleMessage("Mask media file not found".to_string())
})?;
let image_url = {
@@ -157,7 +157,7 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -185,13 +185,13 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_dev_juggernaut_infill_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -203,7 +203,7 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -285,7 +285,7 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -294,7 +294,7 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(FluxDevJuggernautInpaintImageResponse {
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -46,7 +46,7 @@ pub async fn flux_pro_1_inpaint_image_handler(
http_request: HttpRequest,
request: Json<FluxPro1InpaintImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<FluxPro1InpaintImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<FluxPro1InpaintImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -60,7 +60,7 @@ pub async fn flux_pro_1_inpaint_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -73,12 +73,12 @@ pub async fn flux_pro_1_inpaint_image_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
const CAN_SEE_DELETED: bool = false;
@@ -98,13 +98,13 @@ pub async fn flux_pro_1_inpaint_image_handler(
Ok(files) => files,
Err(err) => {
error!("Error getting media files by tokens: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if media_files.len() != media_tokens.len() {
warn!("Wrong number of media files returned for tokens: {} found for {} tokens", media_files.len(), media_tokens.len());
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
format!("Not all media files could be found. Media files found: {}, tokens provided: {}",
media_files.len(), media_tokens.len())));
}
@@ -115,14 +115,14 @@ pub async fn flux_pro_1_inpaint_image_handler(
.find(|file| file.token == request.image_media_token)
.ok_or_else(|| {
warn!("Image media file not found for token: {}", request.image_media_token);
AdvancedCommonWebError::BadInputWithSimpleMessage("Image media file not found".to_string())
CommonWebError::BadInputWithSimpleMessage("Image media file not found".to_string())
})?;
let mask_media_file = media_files.iter()
.find(|file| file.token == request.mask_media_token)
.ok_or_else(|| {
warn!("Mask media file not found for token: {}", request.mask_media_token);
AdvancedCommonWebError::BadInputWithSimpleMessage("Mask media file not found".to_string())
CommonWebError::BadInputWithSimpleMessage("Mask media file not found".to_string())
})?;
let image_url = {
@@ -157,7 +157,7 @@ pub async fn flux_pro_1_inpaint_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -185,13 +185,13 @@ pub async fn flux_pro_1_inpaint_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_pro_1_infill_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -203,7 +203,7 @@ pub async fn flux_pro_1_inpaint_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -285,7 +285,7 @@ pub async fn flux_pro_1_inpaint_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -294,7 +294,7 @@ pub async fn flux_pro_1_inpaint_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(FluxPro1InpaintImageResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -46,12 +46,12 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<BytedanceSeedream5LiteMultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<BytedanceSeedream5LiteMultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<BytedanceSeedream5LiteMultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -64,7 +64,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -74,7 +74,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -95,7 +95,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -158,7 +158,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_bytedance_seedream_v5_lite_edit_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -213,14 +213,14 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_bytedance_seedream_v5_lite_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -232,7 +232,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_aspect_ratio = request.image_size.map(|size| match size {
@@ -330,7 +330,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -339,7 +339,7 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(BytedanceSeedream5LiteMultiFunctionImageGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<BytedanceSeedreamV4MultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<BytedanceSeedreamV4MultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<BytedanceSeedreamV4MultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let image_urls = match request.image_media_tokens.as_ref() {
@@ -107,7 +107,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -175,7 +175,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_bytedance_seedream_v4_edit_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -235,14 +235,14 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_bytedance_seedream_v4_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -254,7 +254,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -351,7 +351,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -360,7 +360,7 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(BytedanceSeedreamV4MultiFunctionImageGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<BytedanceSeedreamV4p5MultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<BytedanceSeedreamV4p5MultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<BytedanceSeedreamV4p5MultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let image_urls = match request.image_media_tokens.as_ref() {
@@ -107,7 +107,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -174,7 +174,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_bytedance_seedream_v4p5_edit_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -233,14 +233,14 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_bytedance_seedream_v4p5_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -252,7 +252,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -348,7 +348,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -357,7 +357,7 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(BytedanceSeedreamV4p5MultiFunctionImageGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,12 +58,12 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<GptImage1p5MultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GptImage1p5MultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<GptImage1p5MultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -76,7 +76,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -86,7 +86,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -141,7 +141,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -223,7 +223,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gpt_image_1p5_image_edit_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -289,14 +289,14 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gpt_image_1p5_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -308,7 +308,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -399,7 +399,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -408,7 +408,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GptImage1p5MultiFunctionImageGenResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -46,12 +46,12 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<NanaBanana2MultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<NanaBanana2MultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<NanaBanana2MultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -64,7 +64,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -74,7 +74,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -95,7 +95,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -169,7 +169,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_nano_banana_2_edit_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -236,14 +236,14 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_nano_banana_2_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -255,7 +255,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_aspect_ratio = match request.aspect_ratio {
@@ -360,7 +360,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -369,7 +369,7 @@ pub async fn nano_banana_2_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(NanaBanana2MultiFunctionImageGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -61,12 +61,12 @@ pub async fn nano_banana_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<NanoBananaMultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<NanoBananaMultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<NanoBananaMultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -79,7 +79,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -89,7 +89,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -110,7 +110,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -173,7 +173,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gemini_25_flash_edit_webhook : {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -230,14 +230,14 @@ pub async fn nano_banana_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gemini_25_flash_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -249,7 +249,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -348,7 +348,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -357,7 +357,7 @@ pub async fn nano_banana_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(NanoBananaMultiFunctionImageGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -59,12 +59,12 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
http_request: HttpRequest,
request: Json<NanoBananaProMultiFunctionImageGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<NanoBananaProMultiFunctionImageGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<NanoBananaProMultiFunctionImageGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -77,7 +77,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -87,7 +87,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -108,7 +108,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -179,7 +179,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_nano_banana_pro_image_edit_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -244,14 +244,14 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_nano_banana_pro_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -263,7 +263,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -369,7 +369,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -378,7 +378,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(NanoBananaProMultiFunctionImageGenResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::job_failure_test::test_synthetic_failure_reason;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
@@ -48,7 +48,7 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
http_request: HttpRequest,
request: Json<GenerateFlux1DevTextToImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateFlux1DevTextToImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateFlux1DevTextToImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -62,7 +62,7 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -72,7 +72,7 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -82,19 +82,19 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// Secret test hook: insert a synthetic "complete_failure" job without calling Fal.
@@ -169,13 +169,13 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_1_dev_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -187,7 +187,7 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -258,7 +258,7 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -267,7 +267,7 @@ pub async fn generate_flux_1_dev_text_to_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateFlux1DevTextToImageResponse {
@@ -287,7 +287,7 @@ async fn insert_mock_failure_job(
maybe_frontend_failure_category: Option<FrontendFailureCategory>,
maybe_failure_reason: Option<&str>,
mysql_connection: &mut sqlx::pool::PoolConnection<sqlx::MySql>,
) -> Result<Json<GenerateFlux1DevTextToImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateFlux1DevTextToImageResponse>, CommonWebError> {
let ip_address = get_request_ip(http_request);
let mut transaction = mysql_connection
@@ -295,7 +295,7 @@ async fn insert_mock_failure_job(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let prompt_result = insert_prompt(InsertPromptArgs {
@@ -346,7 +346,7 @@ async fn insert_mock_failure_job(
Ok(token) => token,
Err(err) => {
warn!("Error inserting mock failure job: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -355,7 +355,7 @@ async fn insert_mock_failure_job(
.await
.map_err(|err| {
error!("Error committing mock failure transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateFlux1DevTextToImageResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -42,7 +42,7 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
http_request: HttpRequest,
request: Json<GenerateFlux1SchnellTextToImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateFlux1SchnellTextToImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateFlux1SchnellTextToImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -56,7 +56,7 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -66,7 +66,7 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -76,19 +76,19 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// // TODO: This is test code
@@ -149,13 +149,13 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_1_schnell_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -167,7 +167,7 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -238,7 +238,7 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -247,7 +247,7 @@ pub async fn generate_flux_1_schnell_text_to_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateFlux1SchnellTextToImageResponse {
@@ -2,7 +2,7 @@ use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -48,7 +48,7 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
http_request: HttpRequest,
request: Json<GenerateFluxPro11TextToImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateFluxPro11TextToImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateFluxPro11TextToImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -62,7 +62,7 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -72,19 +72,19 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -137,13 +137,13 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_pro_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -155,7 +155,7 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -228,7 +228,7 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -237,7 +237,7 @@ pub async fn generate_flux_pro_11_text_to_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateFluxPro11TextToImageResponse {
@@ -2,7 +2,7 @@ use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::billing::wallets::temporary_test_wallet_deduction::temporary_test_wallet_deduction;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -48,7 +48,7 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
http_request: HttpRequest,
request: Json<GenerateFluxPro11UltraTextToImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateFluxPro11UltraTextToImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateFluxPro11UltraTextToImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -62,7 +62,7 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -72,19 +72,19 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -141,13 +141,13 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_flux_pro_ultra_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -159,7 +159,7 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -236,7 +236,7 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -245,7 +245,7 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateFluxPro11UltraTextToImageResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -50,12 +50,12 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
http_request: HttpRequest,
request: Json<GenerateGptImage1TextToImageRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateGptImage1TextToImageResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateGptImage1TextToImageResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -68,7 +68,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -78,7 +78,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -90,7 +90,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -153,13 +153,13 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_gpt_image_1_text_to_image_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -171,7 +171,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -242,7 +242,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -251,7 +251,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateGptImage1TextToImageResponse {
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
@@ -47,7 +47,7 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
http_request: HttpRequest,
request: Json<GenerateHunyuan20ImageTo3dRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateHunyuan20ImageTo3dResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateHunyuan20ImageTo3dResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool
.acquire()
.await?;
@@ -58,7 +58,7 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -71,7 +71,7 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
@@ -79,19 +79,19 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -105,16 +105,16 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -143,13 +143,13 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_hunyuan2_image_to_3d_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -158,7 +158,7 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
let mut transaction = mysql_connection.begin().await.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// Insert prompt record if we have a prompt
@@ -233,13 +233,13 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
let _r = transaction.commit().await.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateHunyuan20ImageTo3dResponse {
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
@@ -46,7 +46,7 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
http_request: HttpRequest,
request: Json<GenerateHunyuan21ImageTo3dRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateHunyuan21ImageTo3dResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateHunyuan21ImageTo3dResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool
.acquire()
.await?;
@@ -57,7 +57,7 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -70,7 +70,7 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
// Some(session) => session,
// None => {
// warn!("not logged in");
// return Err(AdvancedCommonWebError::NotAuthorized);
// return Err(CommonWebError::NotAuthorized);
// }
//};
@@ -78,19 +78,19 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -104,16 +104,16 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -142,13 +142,13 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_hunyuan_3d_2_1_image_to_3d_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -157,7 +157,7 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
let mut transaction = mysql_connection.begin().await.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// Insert prompt record if we have a prompt
@@ -232,13 +232,13 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
let _r = transaction.commit().await.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateHunyuan21ImageTo3dResponse {
@@ -1,7 +1,7 @@
use std::collections::HashMap;
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -61,7 +61,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
http_request: HttpRequest,
request: Json<Hunyuan3dV3MultiFunctionObjectGenRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<Hunyuan3dV3MultiFunctionObjectGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Hunyuan3dV3MultiFunctionObjectGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -72,7 +72,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -80,7 +80,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
.get_avt_token_from_request(&http_request);
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
// Collect all media tokens to look up in a single batch query
@@ -142,7 +142,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -196,7 +196,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
"Error calling enqueue_hunyuan3d_v3_text_to_3d_webhook: {:?}",
err
);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?
}
@@ -237,7 +237,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
"Error calling enqueue_hunyuan3d_v3_sketch_to_3d_webhook: {:?}",
err
);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?
}
@@ -280,13 +280,13 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
"Error calling enqueue_hunyuan3d_v3_image_to_3d_webhook: {:?}",
err
);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?
}
// Neither prompt nor image - invalid request
(false, false) => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"Either prompt or image_media_token must be provided".to_string(),
));
}
@@ -294,7 +294,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
let external_job_id = fal_result.request_id.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -303,7 +303,7 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
let mut transaction = mysql_connection.begin().await.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// Insert prompt record if we have a prompt
@@ -403,13 +403,13 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler(
"Error inserting generic inference job for FAL queue: {:?}",
err
);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
let _r = transaction.commit().await.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Hunyuan3dV3MultiFunctionObjectGenResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoint_helpers::refund_wallet_after_api_failure::refund_wallet_after_api_failure;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
@@ -48,18 +48,18 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
http_request: HttpRequest,
request: Json<GenerateWorldlabsMarble0p1MiniSplatRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateWorldlabsMarble0p1MiniSplatResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateWorldlabsMarble0p1MiniSplatResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if request.image_media_file_token.is_none() && request.prompt.is_none() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"At least one of image_media_file_token or prompt must be provided".to_string()
));
}
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -72,7 +72,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from(e)
CommonWebError::from(e)
})?;
let maybe_avt_token = server_state
@@ -82,7 +82,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -90,7 +90,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
let apriori_job_token = InferenceJobToken::generate();
@@ -126,7 +126,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
let cdn_url = image_urls.get(image_token)
.ok_or_else(|| {
warn!("Image token not found in lookup results: {:?}", image_token);
AdvancedCommonWebError::server_error_with_message("Image token was not found in lookup results")
CommonWebError::server_error_with_message("Image token was not found in lookup results")
})?;
WorldPrompt::Image {
@@ -170,7 +170,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let prompt_result = insert_prompt(InsertPromptArgs {
@@ -240,7 +240,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for WorldLabs queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -249,7 +249,7 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateWorldlabsMarble0p1MiniSplatResponse {
@@ -258,16 +258,16 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler(
}))
}
fn classify_worldlabs_error(err: WorldLabsError) -> AdvancedCommonWebError {
fn classify_worldlabs_error(err: WorldLabsError) -> CommonWebError {
if let WorldLabsError::ApiSpecific(WorldLabsSpecificApiError::NsfwContentPolicyRejected { message }) = &err {
return AdvancedCommonWebError::ContentPolicyRejectedWithMessage(
return CommonWebError::ContentPolicyRejectedWithMessage(
message.clone().unwrap_or_else(|| "Content rejected by policy".to_string())
);
}
if err.is_403_forbidden() {
return AdvancedCommonWebError::Forbidden;
return CommonWebError::Forbidden;
}
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
}
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoint_helpers::refund_wallet_after_api_failure::refund_wallet_after_api_failure;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
@@ -48,18 +48,18 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
http_request: HttpRequest,
request: Json<GenerateWorldlabsMarble0p1PlusSplatRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateWorldlabsMarble0p1PlusSplatResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateWorldlabsMarble0p1PlusSplatResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
if request.image_media_file_token.is_none() && request.prompt.is_none() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"At least one of image_media_file_token or prompt must be provided".to_string()
));
}
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut mysql_connection = server_state.mysql_pool
@@ -72,7 +72,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from(e)
CommonWebError::from(e)
})?;
let maybe_avt_token = server_state
@@ -82,7 +82,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -90,7 +90,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
let apriori_job_token = InferenceJobToken::generate();
@@ -126,7 +126,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
let cdn_url = image_urls.get(image_token)
.ok_or_else(|| {
warn!("Image token not found in lookup results: {:?}", image_token);
AdvancedCommonWebError::server_error_with_message("Image token no found in lookup result")
CommonWebError::server_error_with_message("Image token no found in lookup result")
})?;
WorldPrompt::Image {
@@ -170,7 +170,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let prompt_result = insert_prompt(InsertPromptArgs {
@@ -240,7 +240,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for WorldLabs queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -249,7 +249,7 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateWorldlabsMarble0p1PlusSplatResponse {
@@ -258,17 +258,17 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler(
}))
}
fn classify_worldlabs_error(err: WorldLabsError) -> AdvancedCommonWebError {
fn classify_worldlabs_error(err: WorldLabsError) -> CommonWebError {
if let WorldLabsError::ApiSpecific(WorldLabsSpecificApiError::NsfwContentPolicyRejected { message }) = &err {
return AdvancedCommonWebError::ContentPolicyRejectedWithMessage(
return CommonWebError::ContentPolicyRejectedWithMessage(
message.clone().unwrap_or_else(|| "Content rejected by policy".to_string())
);
}
if err.is_403_forbidden() {
return AdvancedCommonWebError::Forbidden;
return CommonWebError::Forbidden;
}
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
}
@@ -34,7 +34,7 @@ use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPrompt
use tokens::tokens::generic_inference_jobs::InferenceJobToken;
use tokens::tokens::media_files::MediaFileToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -59,7 +59,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
http_request: HttpRequest,
request: Json<BeebleSwitchXEditVideoRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<BeebleSwitchXEditVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<BeebleSwitchXEditVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -73,12 +73,12 @@ pub async fn beeble_switchx_edit_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from(e)
CommonWebError::from(e)
})?;
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => return Err(AdvancedCommonWebError::NotAuthorized),
None => return Err(CommonWebError::NotAuthorized),
};
let maybe_avt_token = server_state
@@ -89,18 +89,18 @@ pub async fn beeble_switchx_edit_video_gen_handler(
let source_video_media_token = request.source_video_media_token.as_ref()
.ok_or_else(|| {
AdvancedCommonWebError::BadInputWithSimpleMessage("source_video_media_token is required".to_string())
CommonWebError::BadInputWithSimpleMessage("source_video_media_token is required".to_string())
})?;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// ==================== LOOKUP MEDIA FILES (BATCH) ==================== //
@@ -118,13 +118,13 @@ pub async fn beeble_switchx_edit_video_gen_handler(
&tokens_to_lookup,
).await.map_err(|err| {
warn!("Error looking up media files: {:?}", err);
AdvancedCommonWebError::from(err)
CommonWebError::from(err)
})?;
let source_video_cdn_url = cdn_url_map.get(source_video_media_token)
.ok_or_else(|| {
warn!("Source video media file not found: {:?}", source_video_media_token);
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?
.clone();
@@ -134,7 +134,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
.cloned()
.ok_or_else(|| {
warn!("Reference image media file not found: {:?}", ref_token);
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})
})
.transpose()?;
@@ -148,7 +148,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
let video_bytes = http_download_url_to_bytes(&source_video_cdn_url).await
.map_err(|err| {
error!("Failed to download source video: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!("Downloaded source video: {} bytes", video_bytes.len());
@@ -170,7 +170,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
beeble_api_key, &video_filename, video_content_type, video_bytes.to_vec(),
).await.map_err(|err| {
error!("Beeble video upload failed: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!("Source video uploaded to Beeble: {}", video_upload.beeble_uri);
@@ -181,7 +181,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
let image_bytes = http_download_url_to_bytes(ref_cdn_url).await
.map_err(|err| {
error!("Failed to download reference image: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!("Downloaded reference image: {} bytes", image_bytes.len());
@@ -193,7 +193,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
beeble_api_key, &image_filename, "image/jpeg", image_bytes.to_vec(),
).await.map_err(|err| {
error!("Beeble image upload failed: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!("Reference image uploaded to Beeble: {}", image_upload.beeble_uri);
@@ -227,13 +227,13 @@ pub async fn beeble_switchx_edit_video_gen_handler(
detected_frames,
ref message,
}) => {
AdvancedCommonWebError::BadInputWithSimpleMessage(format!(
CommonWebError::BadInputWithSimpleMessage(format!(
"Video has too many frames: {} (max: {}); {}",
detected_frames, max_frames, message
))
},
_ => {
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
}
}
})?;
@@ -247,7 +247,7 @@ pub async fn beeble_switchx_edit_video_gen_handler(
let mut transaction = mysql_connection.begin().await.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// -- Prompt --
@@ -330,13 +330,13 @@ pub async fn beeble_switchx_edit_video_gen_handler(
Ok(token) => token,
Err(err) => {
error!("Error inserting inference job: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
transaction.commit().await.map_err(|err| {
error!("Error committing transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(BeebleSwitchXEditVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -50,7 +50,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
http_request: HttpRequest,
request: Json<GenerateKling16ProImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateKling16ProImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateKling16ProImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -64,7 +64,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -74,7 +74,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -82,7 +82,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
@@ -103,19 +103,19 @@ pub async fn generate_kling_1_6_pro_video_handler(
for media_file in media_files.iter() {
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
}
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
let media_domain = get_media_domain(&http_request);
@@ -126,7 +126,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("Start frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
let maybe_end_frame_url = match maybe_end_frame_image_media_token {
@@ -137,7 +137,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("End frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?),
};
@@ -192,13 +192,13 @@ pub async fn generate_kling_1_6_pro_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_16_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -210,7 +210,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -277,7 +277,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -286,7 +286,7 @@ pub async fn generate_kling_1_6_pro_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateKling16ProImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -49,7 +49,7 @@ pub async fn generate_kling_2_1_master_video_handler(
http_request: HttpRequest,
request: Json<GenerateKling21MasterImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateKling21MasterImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateKling21MasterImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -63,7 +63,7 @@ pub async fn generate_kling_2_1_master_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -73,7 +73,7 @@ pub async fn generate_kling_2_1_master_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -81,19 +81,19 @@ pub async fn generate_kling_2_1_master_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -107,16 +107,16 @@ pub async fn generate_kling_2_1_master_video_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -181,13 +181,13 @@ pub async fn generate_kling_2_1_master_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_21_master_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -199,7 +199,7 @@ pub async fn generate_kling_2_1_master_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -264,7 +264,7 @@ pub async fn generate_kling_2_1_master_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -273,7 +273,7 @@ pub async fn generate_kling_2_1_master_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateKling21MasterImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -55,7 +55,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
http_request: HttpRequest,
request: Json<GenerateKling21ProImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateKling21ProImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateKling21ProImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -69,7 +69,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -79,7 +79,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -87,7 +87,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
@@ -108,19 +108,19 @@ pub async fn generate_kling_2_1_pro_video_handler(
for media_file in media_files.iter() {
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
}
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
let media_domain = get_media_domain(&http_request);
@@ -131,7 +131,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("Start frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
let maybe_end_frame_url = match maybe_end_frame_image_media_token {
@@ -142,7 +142,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("End frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?),
};
@@ -197,13 +197,13 @@ pub async fn generate_kling_2_1_pro_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_21_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -215,7 +215,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -280,7 +280,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -289,7 +289,7 @@ pub async fn generate_kling_2_1_pro_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateKling21ProImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -55,7 +55,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
http_request: HttpRequest,
request: Json<GenerateSeedance10LiteImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateSeedance10LiteImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateSeedance10LiteImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -69,7 +69,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -79,7 +79,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -87,7 +87,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
@@ -108,19 +108,19 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
for media_file in media_files.iter() {
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
}
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
let media_domain = get_media_domain(&http_request);
@@ -131,7 +131,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("Start frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
let maybe_end_frame_url = match maybe_end_frame_image_media_token {
@@ -142,7 +142,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("End frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?),
};
@@ -211,13 +211,13 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_seedance_1_lite_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -229,7 +229,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -298,7 +298,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -307,7 +307,7 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateSeedance10LiteImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -52,7 +52,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
http_request: HttpRequest,
request: Json<GenerateSeedance10ProImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateSeedance10ProImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateSeedance10ProImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -66,7 +66,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -76,7 +76,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -84,7 +84,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
@@ -99,19 +99,19 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
for media_file in media_files.iter() {
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
}
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
let media_domain = get_media_domain(&http_request);
@@ -122,7 +122,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
.map(|file| file.cdn_url)
.ok_or_else(|| {
warn!("Start frame media file not found after fetch");
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -185,13 +185,13 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_seedance_1_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -203,7 +203,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -272,7 +272,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -281,7 +281,7 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateSeedance10ProImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::analytics::log_browser_session_handler::LogBrowserSessionError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
@@ -56,7 +56,7 @@ pub async fn generate_veo_2_image_to_video_handler(
http_request: HttpRequest,
request: Json<GenerateVeo2ImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateVeo2ImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateVeo2ImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -70,7 +70,7 @@ pub async fn generate_veo_2_image_to_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -80,7 +80,7 @@ pub async fn generate_veo_2_image_to_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -88,19 +88,19 @@ pub async fn generate_veo_2_image_to_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -114,16 +114,16 @@ pub async fn generate_veo_2_image_to_video_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -186,13 +186,13 @@ pub async fn generate_veo_2_image_to_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_2_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -204,7 +204,7 @@ pub async fn generate_veo_2_image_to_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -269,7 +269,7 @@ pub async fn generate_veo_2_image_to_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -278,7 +278,7 @@ pub async fn generate_veo_2_image_to_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateVeo2ImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::analytics::log_browser_session_handler::LogBrowserSessionError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
@@ -48,7 +48,7 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
http_request: HttpRequest,
request: Json<GenerateVeo3FastImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateVeo3FastImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateVeo3FastImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -62,7 +62,7 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -72,7 +72,7 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -80,19 +80,19 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -106,16 +106,16 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -190,13 +190,13 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_3_fast_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -208,7 +208,7 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -274,7 +274,7 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -283,7 +283,7 @@ pub async fn generate_veo_3_fast_image_to_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateVeo3FastImageToVideoResponse {
@@ -1,7 +1,7 @@
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::analytics::log_browser_session_handler::LogBrowserSessionError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
@@ -51,7 +51,7 @@ pub async fn generate_veo_3_image_to_video_handler(
http_request: HttpRequest,
request: Json<GenerateVeo3ImageToVideoRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GenerateVeo3ImageToVideoResponse>, AdvancedCommonWebError> {
) -> Result<Json<GenerateVeo3ImageToVideoResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -65,7 +65,7 @@ pub async fn generate_veo_3_image_to_video_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -75,7 +75,7 @@ pub async fn generate_veo_3_image_to_video_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -83,19 +83,19 @@ pub async fn generate_veo_3_image_to_video_handler(
Some(token) => token,
None => {
warn!("No media file token provided");
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("No media file token provided".to_string()));
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&request.uuid_idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("invalid idempotency token".to_string())
})?;
const IS_MOD : bool = false;
@@ -109,16 +109,16 @@ pub async fn generate_veo_3_image_to_video_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", media_file_token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
if !media_file.media_type.is_jpg_or_png_or_legacy_image() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media file must be a JPG or PNG image".to_string()));
}
let media_domain = get_media_domain(&http_request);
@@ -194,13 +194,13 @@ pub async fn generate_veo_3_image_to_video_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_3_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -212,7 +212,7 @@ pub async fn generate_veo_3_image_to_video_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -278,7 +278,7 @@ pub async fn generate_veo_3_image_to_video_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -287,7 +287,7 @@ pub async fn generate_veo_3_image_to_video_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(GenerateVeo3ImageToVideoResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -60,7 +60,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Kling2p5TurboProMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Kling2p5TurboProMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Kling2p5TurboProMultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -74,7 +74,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -84,12 +84,12 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -124,7 +124,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -134,7 +134,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
}
}
};
@@ -143,7 +143,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -193,7 +193,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_v2p5_turbo_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -242,14 +242,14 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_v2p5_turbo_pro_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -261,7 +261,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -357,7 +357,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -366,7 +366,7 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Kling2p5TurboProMultiFunctionVideoGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Kling2p6ProMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Kling2p6ProMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Kling2p6ProMultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -122,7 +122,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -132,7 +132,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
// Some(token) => match image_urls_by_token.get(token) {
// Some(url) => Some(url.to_string()),
// None => {
// return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
// return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
// }
// }
// };
@@ -141,7 +141,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -190,7 +190,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_v2p6_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -239,14 +239,14 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_v2p6_pro_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -258,7 +258,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -354,7 +354,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -363,7 +363,7 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Kling2p6ProMultiFunctionVideoGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Kling3p0ProMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Kling3p0ProMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Kling3p0ProMultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -121,7 +121,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -131,7 +131,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
}
}
};
@@ -140,7 +140,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -192,7 +192,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_3p0_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -233,14 +233,14 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_3p0_pro_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -252,7 +252,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -359,7 +359,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -368,7 +368,7 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Kling3p0ProMultiFunctionVideoGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Kling3p0StandardMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Kling3p0StandardMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Kling3p0StandardMultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -121,7 +121,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -131,7 +131,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
}
}
};
@@ -140,7 +140,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -192,7 +192,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_3p0_standard_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -233,14 +233,14 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_kling_3p0_standard_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -252,7 +252,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -359,7 +359,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -368,7 +368,7 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Kling3p0StandardMultiFunctionVideoGenResponse {
@@ -2,7 +2,7 @@ use std::collections::HashMap;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
@@ -47,7 +47,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Seedance1p5ProMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Seedance1p5ProMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Seedance1p5ProMultiFunctionVideoGenResponse>, CommonWebError> {
info!("Request: {:?}", request);
@@ -63,7 +63,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -73,12 +73,12 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
// Collect media tokens to look up
@@ -109,7 +109,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -119,7 +119,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
}
}
};
@@ -128,7 +128,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -180,7 +180,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_seedance_1p5_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -220,14 +220,14 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_seedance_1p5_pro_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -239,7 +239,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -346,7 +346,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -355,7 +355,7 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Seedance1p5ProMultiFunctionVideoGenResponse {
@@ -2,7 +2,7 @@ use std::collections::HashMap;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoint_helpers::refund_wallet_after_api_failure::refund_wallet_after_api_failure;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::session::lookup::user_session_feature_flags::UserSessionFeatureFlags;
@@ -79,7 +79,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Seedance2p0MultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<Seedance2p0MultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Seedance2p0MultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -97,20 +97,20 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from(e)
CommonWebError::from(e)
})?;
let user_session = match maybe_user_session {
Some(session) => session,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
let user_token = &user_session.user_token;
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
// --- Collect all media tokens to look up ---
@@ -158,7 +158,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// --- Calculate cost and charge wallet upfront (before uploads) ---
@@ -301,7 +301,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the prompt insert fails.
@@ -437,7 +437,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
Err(err) => {
warn!("Error inserting seedance2pro inference job (order_id={}): {:?}", order_id, err);
if i == 0 {
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
}
}
@@ -445,7 +445,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
let first_job_token = all_job_tokens.first().cloned().ok_or_else(|| {
error!("No inference job token was created");
AdvancedCommonWebError::server_error_with_message("No inference job token was created")
CommonWebError::server_error_with_message("No inference job token was created")
})?;
transaction
@@ -453,7 +453,7 @@ pub async fn seedance_2p0_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Seedance2p0MultiFunctionVideoGenResponse {
@@ -529,14 +529,14 @@ async fn upload_and_generate(
batch_count: KinoviBatchCount,
duration_seconds: u8,
kinovi_character_ids: Option<Vec<String>>,
) -> Result<SeedanceGenerationResult, AdvancedCommonWebError> {
) -> Result<SeedanceGenerationResult, CommonWebError> {
// --- Upload files to seedance2pro CDN ---
let start_frame_url = match request.start_frame_media_token.as_ref() {
None => None,
Some(token) => match file_urls_by_token.get(token) {
None => return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Start frame media not found.".to_string())),
None => return Err(CommonWebError::BadInputWithSimpleMessage("Start frame media not found.".to_string())),
Some(url) => Some(upload_to_seedance2pro(session, url).await?),
}
};
@@ -544,7 +544,7 @@ async fn upload_and_generate(
let end_frame_url = match request.end_frame_media_token.as_ref() {
None => None,
Some(token) => match file_urls_by_token.get(token) {
None => return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("End frame media not found.".to_string())),
None => return Err(CommonWebError::BadInputWithSimpleMessage("End frame media not found.".to_string())),
Some(url) => Some(upload_to_seedance2pro(session, url).await?),
}
};
@@ -614,7 +614,7 @@ async fn upload_and_generate(
let gen_response = generate_video(video_gen_args).await
.map_err(|err| {
warn!("Error calling seedance2pro generate_video: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(SeedanceGenerationResult {
@@ -630,7 +630,7 @@ async fn upload_and_generate(
async fn resolve_kinovi_character_ids(
maybe_tokens: Option<&[CharacterToken]>,
connection: &mut sqlx::pool::PoolConnection<MySql>,
) -> Result<Option<Vec<String>>, AdvancedCommonWebError> {
) -> Result<Option<Vec<String>>, CommonWebError> {
let tokens = match maybe_tokens {
None => return Ok(None),
Some(tokens) if tokens.is_empty() => return Ok(None),
@@ -668,7 +668,7 @@ async fn upload_reference_tokens_to_seedance2pro(
file_urls_by_token: &HashMap<MediaFileToken, Url>,
maybe_tokens: Option<&[MediaFileToken]>,
label: &str,
) -> Result<Option<Vec<String>>, AdvancedCommonWebError> {
) -> Result<Option<Vec<String>>, CommonWebError> {
let tokens = match maybe_tokens {
None => return Ok(None),
Some(tokens) if tokens.is_empty() => return Ok(None),
@@ -679,7 +679,7 @@ async fn upload_reference_tokens_to_seedance2pro(
for token in tokens {
match file_urls_by_token.get(token) {
None => return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
None => return Err(CommonWebError::BadInputWithSimpleMessage(
format!("{} media not found: {:?}", label, token),
)),
Some(url) => {
@@ -694,7 +694,7 @@ async fn upload_reference_tokens_to_seedance2pro(
async fn upload_to_seedance2pro(
session: &Seedance2ProSession,
our_cdn_url: &Url,
) -> Result<String, AdvancedCommonWebError> {
) -> Result<String, CommonWebError> {
let extension = extract_extension_from_url(our_cdn_url, &ExtractExtensions::All)
.map(|ext| ext.without_period().to_string())
.unwrap_or_else(|| "png".to_string());
@@ -705,7 +705,7 @@ async fn upload_to_seedance2pro(
.await
.map_err(|err| {
warn!("Error downloading media file from CDN: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?
.to_vec();
@@ -717,7 +717,7 @@ async fn upload_to_seedance2pro(
.await
.map_err(|err| {
warn!("Error preparing seedance2pro file upload: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let upload_result = upload_file(UploadFileArgs {
@@ -728,7 +728,7 @@ async fn upload_to_seedance2pro(
.await
.map_err(|err| {
warn!("Error uploading file to seedance2pro: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(upload_result.public_url)
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Sora2MultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Sora2MultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Sora2MultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn sora_2_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -122,7 +122,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -132,7 +132,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
// Some(token) => match image_urls_by_token.get(token) {
// Some(url) => Some(url.to_string()),
// None => {
// return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
// return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
// }
// }
// };
@@ -141,7 +141,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -204,7 +204,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_sora_2_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -259,14 +259,14 @@ pub async fn sora_2_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_sora_2_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -278,7 +278,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -375,7 +375,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -384,7 +384,7 @@ pub async fn sora_2_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Sora2MultiFunctionVideoGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -58,7 +58,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Sora2ProMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Sora2ProMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Sora2ProMultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -72,7 +72,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -82,12 +82,12 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -122,7 +122,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -132,7 +132,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
// Some(token) => match image_urls_by_token.get(token) {
// Some(url) => Some(url.to_string()),
// None => {
// return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
// return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
// }
// }
// };
@@ -141,7 +141,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -205,7 +205,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_sora_2_pro_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -261,14 +261,14 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_sora_2_pro_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -280,7 +280,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -377,7 +377,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -386,7 +386,7 @@ pub async fn sora_2_pro_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Sora2ProMultiFunctionVideoGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -57,7 +57,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Veo3p1FastMultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Veo3p1FastMultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Veo3p1FastMultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -71,7 +71,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -81,12 +81,12 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -121,7 +121,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -131,7 +131,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
}
}
};
@@ -140,7 +140,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -209,7 +209,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling veo_3p1_fast_first_last_frame_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -266,7 +266,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_3p1_fast_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
@@ -327,14 +327,14 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_3p1_fast_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -346,7 +346,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -443,7 +443,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -452,7 +452,7 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Veo3p1FastMultiFunctionVideoGenResponse {
@@ -3,7 +3,7 @@ use std::iter::FromIterator;
use std::sync::Arc;
use crate::billing::wallets::attempt_wallet_deduction::attempt_wallet_deduction_else_common_web_error;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::media_files::helpers::get_media_domain::get_media_domain;
@@ -57,7 +57,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
http_request: HttpRequest,
request: Json<Veo3p1MultiFunctionVideoGenRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<Veo3p1MultiFunctionVideoGenResponse>, AdvancedCommonWebError> {
) -> Result<Json<Veo3p1MultiFunctionVideoGenResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -71,7 +71,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let maybe_avt_token = server_state
@@ -81,12 +81,12 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => {
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
if let Err(reason) = validate_idempotency_token_format(&request.uuid_idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
let mut query_media_tokens = None;
@@ -121,7 +121,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for start frame not found.".to_string()));
}
}
};
@@ -131,7 +131,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
Some(token) => match image_urls_by_token.get(token) {
Some(url) => Some(url.to_string()),
None => {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("Media for end frame not found.".to_string()));
}
}
};
@@ -140,7 +140,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
info!("Fal webhook URL: {}", server_state.fal.webhook_url);
@@ -209,7 +209,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling veo_3p1_first_last_frame_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
} else {
@@ -266,7 +266,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_3p1_image_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
@@ -327,14 +327,14 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|err| {
warn!("Error calling enqueue_veo_3p1_text_to_video_webhook: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
}
let external_job_id = fal_result.request_id
.ok_or_else(|| {
warn!("Fal request_id is None");
AdvancedCommonWebError::server_error_with_message("Fal request_id is None")
CommonWebError::server_error_with_message("Fal request_id is None")
})?;
info!("Fal request_id: {}", external_job_id);
@@ -346,7 +346,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// NB: Don't fail the job if the query fails.
@@ -443,7 +443,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting generic inference job for FAL queue: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
@@ -452,7 +452,7 @@ pub async fn veo_3p1_multi_function_video_gen_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(Veo3p1MultiFunctionVideoGenResponse {
@@ -7,7 +7,7 @@ use utoipa::ToSchema;
use mysql_queries::queries::generic_inference::web::dismiss_finished_jobs_for_user::dismiss_finished_jobs_for_user;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_user_session_using_connection::require_user_session_using_connection;
use crate::state::server_state::ServerState;
@@ -25,19 +25,19 @@ pub struct DismissFinishedSessionJobsSuccessResponse {
path = "/v1/jobs/session/dismiss_finished",
responses(
(status = 200, body = DismissFinishedSessionJobsSuccessResponse),
(status = 401, body = AdvancedCommonWebError),
(status = 500, body = AdvancedCommonWebError),
(status = 401, body = CommonWebError),
(status = 500, body = CommonWebError),
),
)]
pub async fn dismiss_finished_session_jobs_handler(
http_request: HttpRequest,
server_state: web::Data<Arc<ServerState>>) -> Result<Json<DismissFinishedSessionJobsSuccessResponse>, AdvancedCommonWebError>
server_state: web::Data<Arc<ServerState>>) -> Result<Json<DismissFinishedSessionJobsSuccessResponse>, CommonWebError>
{
let mut mysql_connection = server_state.mysql_pool.acquire()
.await
.map_err(|e| {
error!("Could not acquire DB pool: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let user_session = require_user_session_using_connection(
@@ -48,7 +48,7 @@ pub async fn dismiss_finished_session_jobs_handler(
.await
.map_err(|err| {
error!("tts job query error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
Ok(Json(DismissFinishedSessionJobsSuccessResponse {
@@ -1,7 +1,7 @@
use std::collections::HashSet;
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_domain::MediaDomain;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::inference_job::utils::estimates::estimate_job_progress::estimate_job_progress;
@@ -161,7 +161,7 @@ pub async fn batch_get_inference_job_status_handler(
http_request: HttpRequest,
query: Query<BatchGetInferenceJobStatusQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<BatchGetInferenceJobStatusSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<BatchGetInferenceJobStatusSuccessResponse>, CommonWebError> {
let tokens = query.tokens.iter()
.map(|token| token.trim())
@@ -188,14 +188,14 @@ pub async fn batch_get_inference_job_status_handler(
).await
.map_err(|err| {
warn!("Batch job query error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let mut redis = server_state.redis_pool
.get()
.map_err(|e| {
warn!("Redis pool error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
// TODO(bt,2024-04-22): Look up the extra redis statuses per item.
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_domain::MediaDomain;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::inference_job::utils::estimates::estimate_job_progress::estimate_job_progress;
@@ -153,12 +153,12 @@ pub async fn get_inference_job_status_handler(
http_request: HttpRequest,
path: Path<GetInferenceJobStatusPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<GetInferenceJobStatusSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<GetInferenceJobStatusSuccessResponse>, CommonWebError> {
if path.token.as_str().trim() == "None" {
// NB: A bunch of Python clients use our API and can fail in this manner.
// This was a large traffic driver during the 2023-03-08 outage.
// Presumably, it's this client: https://github.com/shards-7/fakeyou.py
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
}
// NB: Since this is publicly exposed, we don't query sensitive data.
@@ -169,10 +169,10 @@ pub async fn get_inference_job_status_handler(
let record = match maybe_status {
Ok(Some(record)) => record,
Ok(None) => return Err(AdvancedCommonWebError::NotFound),
Ok(None) => return Err(CommonWebError::NotFound),
Err(err) => {
warn!("Job query error for token {}: {:?}", path.token.as_str(), err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
@@ -180,7 +180,7 @@ pub async fn get_inference_job_status_handler(
.get()
.map_err(|e| {
warn!("Redis pool error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
// TODO(bt,2023-05-21): Make async.
@@ -1,7 +1,7 @@
use std::collections::HashSet;
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_domain::MediaDomain;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::endpoints::inference_job::utils::estimates::estimate_job_progress::estimate_job_progress;
@@ -63,7 +63,7 @@ pub async fn list_session_jobs_handler(
http_request: HttpRequest,
query: Query<ListSessionJobsQueryParams>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<ListSessionJobsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListSessionJobsSuccessResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -72,7 +72,7 @@ pub async fn list_session_jobs_handler(
// ==================== USER SESSION ==================== //
// NB: SessionCheckerError → AdvancedCommonWebError maps payload errors (bad cookie) to 401
// NB: SessionCheckerError → CommonWebError maps payload errors (bad cookie) to 401
// and DB / cache errors to 500.
let maybe_user_session = server_state
.session_checker
@@ -96,7 +96,7 @@ pub async fn list_session_jobs_handler(
(None, Some(avt_token)) => SessionUser::Anonymous(avt_token),
(None, None) => {
// TODO(bt,2025-04-15): We should install an AVT cookie.
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -111,7 +111,7 @@ pub async fn list_session_jobs_handler(
let mut redis = server_state.redis_pool
.get()
.map_err(AdvancedCommonWebError::from_error)?;
.map_err(CommonWebError::from_error)?;
// TODO(bt,2024-04-22): Look up the extra redis statuses per item.
@@ -142,7 +142,7 @@ fn records_to_response(
records: Vec<GenericInferenceJobStatus>,
server_environment: ServerEnvironment,
media_domain: MediaDomain,
) -> Result<Json<ListSessionJobsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListSessionJobsSuccessResponse>, CommonWebError> {
let mut records = records.into_iter()
.map(|record| {
db_record_to_response_payload(record, None, server_environment, media_domain)
@@ -1,7 +1,7 @@
use std::fmt;
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::response_success_helpers::simple_json_success;
use crate::state::server_state::ServerState;
use crate::util::delete_role_disambiguation::{delete_role_disambiguation, DeleteRole};
@@ -27,9 +27,9 @@ use utoipa::ToSchema;
path = "/v1/media_files/file/{token}",
responses(
(status = 200, description = "Success Delete", body = SimpleGenericJsonSuccess),
(status = 400, description = "Bad input", body = AdvancedCommonWebError),
(status = 401, description = "Not authorized", body = AdvancedCommonWebError),
(status = 500, description = "Server error", body = AdvancedCommonWebError),
(status = 400, description = "Bad input", body = CommonWebError),
(status = 401, description = "Not authorized", body = CommonWebError),
(status = 500, description = "Server error", body = CommonWebError),
),
params(
("request" = DeleteMediaFileRequest, description = "Payload for Request"),
@@ -41,21 +41,21 @@ pub async fn delete_media_file_handler(
path: Path<DeleteMediaFilePathInfo>,
request: Json<DeleteMediaFileRequest>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<SimpleGenericJsonSuccess>, AdvancedCommonWebError> {
) -> Result<Json<SimpleGenericJsonSuccess>, CommonWebError> {
let maybe_user_session = server_state
.session_checker
.maybe_get_user_session(&http_request, &server_state.mysql_pool)
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
let user_session = match maybe_user_session {
Some(session) => session,
None => {
warn!("not logged in");
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
};
@@ -71,11 +71,11 @@ pub async fn delete_media_file_handler(
Ok(Some(media_file)) => media_file,
Ok(None) => {
warn!("MediaFile not found: {:?}", path.token);
return Err(AdvancedCommonWebError::NotFound);
return Err(CommonWebError::NotFound);
},
Err(err) => {
warn!("Error looking up media_file: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
@@ -84,7 +84,7 @@ pub async fn delete_media_file_handler(
if !is_creator && !is_mod {
warn!("user is not allowed to delete this media_file: {:?}", user_session.user_token);
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
let delete_role = delete_role_disambiguation(is_mod, is_creator, request.as_mod);
@@ -93,7 +93,7 @@ pub async fn delete_media_file_handler(
match delete_role {
DeleteRole::ErrorDoNotDelete => {
warn!("user is not allowed to delete media_files: {:?}", user_session.user_token);
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
DeleteRole::AsUser => {
delete_media_file_as_user(
@@ -113,7 +113,7 @@ pub async fn delete_media_file_handler(
match delete_role {
DeleteRole::ErrorDoNotDelete => {
warn!("user is not allowed to undelete voices: {:?}", user_session.user_token);
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
DeleteRole::AsUser => {
// NB: Technically only mods can see their own media_files
@@ -136,7 +136,7 @@ pub async fn delete_media_file_handler(
Ok(_) => {},
Err(err) => {
warn!("Update media_file mod approval status DB error: {:?}", err);
return Err(AdvancedCommonWebError::from_anyhow_error(err));
return Err(CommonWebError::from_anyhow_error(err));
}
};
@@ -24,7 +24,7 @@ use tokens::tokens::model_weights::ModelWeightToken;
use tokens::tokens::prompts::PromptToken;
use utoipa::{IntoParams, ToSchema};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats;
@@ -214,7 +214,7 @@ pub async fn batch_get_media_files_handler(
http_request: HttpRequest,
query: Query<BatchGetMediaFilesQueryParams>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<BatchGetMediaFilesSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<BatchGetMediaFilesSuccessResponse>, CommonWebError> {
let maybe_user_session = server_state
.session_checker
.maybe_get_user_session(&http_request, &server_state.mysql_pool)
@@ -248,7 +248,7 @@ pub async fn batch_get_media_files_handler(
Ok(media_files) => media_files,
Err(e) => {
warn!("query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
};
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_domain::MediaDomain;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
@@ -217,7 +217,7 @@ pub async fn get_media_file_handler(
http_request: HttpRequest,
path: Path<GetMediaFilePathInfo>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<GetMediaFileSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<GetMediaFileSuccessResponse>, CommonWebError> {
let media_file_token = path.into_inner().token;
let maybe_user_session = server_state
@@ -267,7 +267,7 @@ async fn modern_media_file_lookup(
show_deleted_results: bool,
server_state: &ServerState,
media_domain: MediaDomain,
) -> Result<GetMediaFileSuccessResponse, AdvancedCommonWebError> {
) -> Result<GetMediaFileSuccessResponse, CommonWebError> {
let is_mod = show_deleted_results;
@@ -280,9 +280,9 @@ async fn modern_media_file_lookup(
let result = match result {
Err(e) => {
warn!("query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
Ok(None) => return Err(AdvancedCommonWebError::NotFound),
Ok(None) => return Err(CommonWebError::NotFound),
Ok(Some(result)) => result,
};
@@ -330,7 +330,7 @@ async fn modern_media_file_lookup(
public_bucket_url: bucket_url_from_media_path(&public_bucket_path, media_domain, server_state.server_environment)
.map_err(|err| {
warn!("error creating URL: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?,
public_bucket_path: public_bucket_path
.get_full_object_path_str()
@@ -415,7 +415,7 @@ async fn emulate_media_file_with_legacy_tts_result_lookup(
show_deleted_results: bool,
server_state: &ServerState,
media_domain: MediaDomain,
) -> Result<GetMediaFileSuccessResponse, AdvancedCommonWebError> {
) -> Result<GetMediaFileSuccessResponse, CommonWebError> {
let result = select_tts_result_by_token(
&media_file_token.as_str(),
@@ -426,9 +426,9 @@ async fn emulate_media_file_with_legacy_tts_result_lookup(
let result = match result {
Err(e) => {
warn!("query error (legacy TTS): {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
Ok(None) => return Err(AdvancedCommonWebError::NotFound),
Ok(None) => return Err(CommonWebError::NotFound),
Ok(Some(result)) => result,
};
@@ -468,7 +468,7 @@ async fn emulate_media_file_with_legacy_tts_result_lookup(
public_bucket_url: bucket_url_from_str_path(&public_bucket_path, media_domain, server_state.server_environment)
.map_err(|err| {
warn!("error creating URL: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?,
public_bucket_path,
cover_image: MediaFileCoverImageDetails::from_legacy_token_str(&result.tts_result_token),
@@ -1,6 +1,6 @@
use std::sync::Arc;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details_builder::MediaFileCoverImageDetailsBuilder;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::user_details_lite_builder::UserDetailsLightBuilder;
@@ -40,7 +40,7 @@ pub async fn list_batch_generated_redux_media_files_handler(
http_request: HttpRequest,
path: Path<ListBatchGeneratedReduxMediaFilesPathInfo>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<ListBatchGeneratedReduxMediaFilesSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListBatchGeneratedReduxMediaFilesSuccessResponse>, CommonWebError> {
let mut mysql_connection = server_state.mysql_pool
.acquire()
.await?;
@@ -74,7 +74,7 @@ pub async fn list_batch_generated_redux_media_files_handler(
Ok(batch) => batch.media_files,
Err(e) => {
warn!("query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
};
@@ -21,7 +21,7 @@ use time::ext::InstantExt;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::{IntoParams, ToSchema};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
@@ -197,7 +197,7 @@ pub async fn list_featured_media_files_handler(
http_request: HttpRequest,
query: Query<ListFeaturedMediaFilesQueryParams>,
server_state: web::Data<Arc<ServerState>>
) -> Result<HttpResponse, AdvancedCommonWebError> {
) -> Result<HttpResponse, CommonWebError> {
let cache_start = Instant::now();
@@ -337,7 +337,7 @@ async fn database_lookup(
query: &ListFeaturedMediaFilesQueryParams,
server_state: &ServerState,
maybe_cloudflare_header: Option<&str>,
) -> Result<FeaturedMediaFileListPage, AdvancedCommonWebError> {
) -> Result<FeaturedMediaFileListPage, CommonWebError> {
// TODO(bt,2023-12-04): Enforce real maximums and defaults
let limit = query.page_size.unwrap_or(25);
@@ -376,7 +376,7 @@ async fn database_lookup(
mysql_pool: &server_state.mysql_pool,
}).await.map_err(|err| {
error!("DB error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let query_duration = Instant::now().signed_duration_since(query_start);
@@ -21,7 +21,7 @@ use tokens::tokens::batch_generations::BatchGenerationToken;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::{IntoParams, ToSchema};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
@@ -159,7 +159,7 @@ pub async fn list_media_files_by_batch_token_handler(
path: Path<ListMediaFilesByBatchPathInfo>,
query: Query<ListMediaFilesByBatchQueryParams>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<ListMediaFilesByBatchSuccessResponse>, AdvancedCommonWebError>
) -> Result<Json<ListMediaFilesByBatchSuccessResponse>, CommonWebError>
{
let maybe_user_session = server_state
.session_checker
@@ -193,7 +193,7 @@ pub async fn list_media_files_by_batch_token_handler(
Ok(results) => results,
Err(e) => {
warn!("Query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
};
@@ -20,7 +20,7 @@ use mysql_queries::queries::media_files::list::list_media_files_for_user::{list_
use tokens::tokens::media_files::MediaFileToken;
use utoipa::{IntoParams, ToSchema};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
@@ -194,7 +194,7 @@ pub async fn list_media_files_for_user_handler(
path: Path<ListMediaFilesForUserPathInfo>,
query: Query<ListMediaFilesForUserQueryParams>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<ListMediaFilesForUserSuccessResponse>, AdvancedCommonWebError>
) -> Result<Json<ListMediaFilesForUserSuccessResponse>, CommonWebError>
{
let maybe_user_session = server_state
.session_checker
@@ -254,7 +254,7 @@ pub async fn list_media_files_for_user_handler(
Ok(results) => results,
Err(e) => {
warn!("Query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
};
@@ -20,7 +20,7 @@ use mysql_queries::queries::media_files::list::list_media_files::{list_media_fil
use tokens::tokens::media_files::MediaFileToken;
use utoipa::{IntoParams, ToSchema};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
@@ -190,7 +190,7 @@ pub async fn list_media_files_handler(
http_request: HttpRequest,
query: Query<ListMediaFilesQueryParams>,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<ListMediaFilesSuccessResponse>, AdvancedCommonWebError>
) -> Result<Json<ListMediaFilesSuccessResponse>, CommonWebError>
{
let maybe_user_session = server_state
.session_checker
@@ -201,7 +201,7 @@ pub async fn list_media_files_handler(
if !allowed_explore_media_access(maybe_user_session.as_ref()) {
warn!("Explore media access is not permitted for user");
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
let mut is_mod = false;
@@ -254,7 +254,7 @@ pub async fn list_media_files_handler(
Ok(results) => results,
Err(e) => {
warn!("Query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
};
@@ -19,7 +19,7 @@ use redis::Commands;
use tokens::tokens::media_files::MediaFileToken;
use utoipa::ToSchema;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::common_responses::media::media_file_cover_image_details::MediaFileCoverImageDetails;
use crate::http_server::common_responses::media::media_links_builder::MediaLinksBuilder;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
@@ -136,18 +136,18 @@ const REDIS_KEY : &str = "pinned_media_files_list";
pub async fn list_pinned_media_files_handler(
http_request: HttpRequest,
server_state: web::Data<Arc<ServerState>>
) -> Result<Json<ListPinnedMediaFilesSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListPinnedMediaFilesSuccessResponse>, CommonWebError> {
let mut redis = server_state.redis_pool.get()
.map_err(|err| {
error!("Could not obtain redis: {err}");
AdvancedCommonWebError::server_error_with_message("pinned media files error")
CommonWebError::server_error_with_message("pinned media files error")
})?;
let token_list : Option<String> = redis.get(REDIS_KEY)
.map_err(|err| {
error!("Could not get redis result: {err}");
AdvancedCommonWebError::server_error_with_message("pinned media files error")
CommonWebError::server_error_with_message("pinned media files error")
})?;
let media_file_tokens = token_list
@@ -171,7 +171,7 @@ pub async fn list_pinned_media_files_handler(
Ok(media_files) => media_files,
Err(e) => {
warn!("Query error: {:?}", e);
return Err(AdvancedCommonWebError::from_anyhow_error(e));
return Err(CommonWebError::from_anyhow_error(e));
}
};
}
@@ -13,7 +13,7 @@ use mysql_queries::queries::staff_audit_logs::insert_staff_audit_log::{
};
use pager::notification::notification_details_builder::NotificationDetailsBuilder;
use pager::notification::notification_urgency::NotificationUrgency;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -33,13 +33,13 @@ pub async fn moderation_send_alert_handler(
http_request: HttpRequest,
request: Json<ModerationSendAlertRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModerationSendAlertResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModerationSendAlertResponse>, CommonWebError> {
let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let ip_address = get_request_ip(&http_request);
@@ -77,7 +77,7 @@ pub async fn moderation_send_alert_handler(
.enqueue_page(notification)
.map_err(|err| {
warn!("moderation_send_alert error: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// Insert staff audit log.
@@ -91,7 +91,7 @@ pub async fn moderation_send_alert_handler(
phantom: PhantomData,
}).await.map_err(|err| {
warn!("Failed to insert staff audit log: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(ModerationSendAlertResponse {
@@ -14,7 +14,7 @@ use mysql_queries::queries::debug_logs::list_debug_logs_for_token::{
use tokens::tokens::non_unique::debug_logs_event_token::DebugLogEventToken;
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -73,14 +73,14 @@ pub async fn moderation_list_debug_logs_for_token_handler(
path: web::Path<ListDebugLogsPathInfo>,
query: web::Query<ListDebugLogsQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListDebugLogsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListDebugLogsSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
&server_state,
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -92,7 +92,7 @@ pub async fn moderation_list_debug_logs_for_token_handler(
phantom: Default::default(),
}).await.map_err(|err| {
warn!("Error listing debug logs for token {}: {:?}", path.token, err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let debug_logs: Vec<DebugLogEntry> = rows.into_iter().map(|row| {
@@ -15,7 +15,7 @@ use tokens::tokens::non_unique::debug_logs_event_token::DebugLogEventToken;
use tokens::tokens::prompts::PromptToken;
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -91,14 +91,14 @@ pub async fn moderation_get_job_by_token_handler(
http_request: HttpRequest,
path: web::Path<GetJobByTokenPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<GetJobByTokenSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<GetJobByTokenSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
&server_state,
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -109,10 +109,10 @@ pub async fn moderation_get_job_by_token_handler(
phantom: Default::default(),
}).await.map_err(|err| {
warn!("Error fetching job by token {}: {:?}", path.token, err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let job = job.ok_or(AdvancedCommonWebError::NotFound)?;
let job = job.ok_or(CommonWebError::NotFound)?;
Ok(Json(GetJobByTokenSuccessResponse {
success: true,
@@ -12,7 +12,7 @@ use artcraft_api_defs::moderation::jobs::user::list_user_jobs::{
use mysql_queries::queries::generic_inference::web::list_user_jobs_for_moderation::list_user_jobs_for_moderation;
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,17 +34,17 @@ pub async fn list_user_jobs_handler(
http_request: HttpRequest,
path: Path<ListUserJobsPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListUserJobsResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListUserJobsResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let results = list_user_jobs_for_moderation(&path.user_token, &server_state.mysql_pool)
.await
.map_err(|err| {
warn!("list_user_jobs error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let jobs = results.into_iter().map(|row| ListUserJobsEntry {
@@ -12,7 +12,7 @@ use mysql_queries::queries::staff_audit_logs::list_staff_audit_logs::{
use tokens::tokens::staff_audit_logs::StaffAuditLogToken;
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -74,7 +74,7 @@ pub async fn moderator_list_staff_audit_logs_handler(
http_request: HttpRequest,
query: Query<ListStaffAuditLogsQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListStaffAuditLogsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListStaffAuditLogsSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
@@ -82,7 +82,7 @@ pub async fn moderator_list_staff_audit_logs_handler(
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let limit = query.limit
@@ -96,7 +96,7 @@ pub async fn moderator_list_staff_audit_logs_handler(
.decode_cursor_expecting_name(CURSOR_NAME, cursor_str)
.map_err(|err| {
warn!("Failed to decode cursor: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
"Invalid cursor".to_string())
})?;
decoded.last_id
@@ -111,7 +111,7 @@ pub async fn moderator_list_staff_audit_logs_handler(
},
).await.map_err(|err| {
warn!("Failed to list staff audit logs: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_cursor = records.last().map(|last| {
@@ -119,7 +119,7 @@ pub async fn moderator_list_staff_audit_logs_handler(
.encode_last_id_cursor(CURSOR_NAME, last.id)
}).transpose().map_err(|err| {
warn!("Failed to encode cursor: {:?}", err);
AdvancedCommonWebError::server_error_with_message("Failed to encode cursor")
CommonWebError::server_error_with_message("Failed to encode cursor")
})?;
let audit_logs = records.into_iter().map(|r| {
@@ -14,7 +14,7 @@ use mysql_queries::queries::users::user::list::list_subscribing_users_by_signup_
ListSubscribingUsersBySignupDateArgs,
};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,11 +34,11 @@ pub async fn moderator_list_subscribing_users_by_signup_date_handler(
http_request: HttpRequest,
request: Json<ModeratorListSubscribingUsersBySignupDateRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorListSubscribingUsersBySignupDateResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorListSubscribingUsersBySignupDateResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let result = list_subscribing_users_by_signup_date_for_moderation(
ListSubscribingUsersBySignupDateArgs {
@@ -49,7 +49,7 @@ pub async fn moderator_list_subscribing_users_by_signup_date_handler(
).await
.map_err(|err| {
warn!("moderator_list_subscribing_users_by_signup_date error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let users = result.users.into_iter().map(|u| ModeratorListSubscribingUsersBySignupDateEntry {
@@ -14,7 +14,7 @@ use mysql_queries::queries::users::user::list::list_users_by_signup_date_for_mod
ListUsersBySignupDateArgs,
};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,11 +34,11 @@ pub async fn moderator_list_users_by_signup_date_handler(
http_request: HttpRequest,
request: Json<ModeratorListUsersBySignupDateRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorListUsersBySignupDateResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorListUsersBySignupDateResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let result = list_users_by_signup_date_for_moderation(
ListUsersBySignupDateArgs {
@@ -49,7 +49,7 @@ pub async fn moderator_list_users_by_signup_date_handler(
).await
.map_err(|err| {
warn!("moderator_list_users_by_signup_date error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let users = result.users.into_iter().map(|u| ModeratorListUsersBySignupDateEntry {
@@ -11,7 +11,7 @@ use artcraft_api_defs::moderation::user::user_lookup_by_stripe_customer_id::{
};
use mysql_queries::queries::users::user_subscriptions::lookup_users_by_stripe_customer_id::lookup_users_by_stripe_customer_id;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -31,11 +31,11 @@ pub async fn moderator_user_lookup_by_stripe_customer_id_handler(
http_request: HttpRequest,
request: Json<ModeratorUserLookupByStripeCustomerIdRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorUserLookupByStripeCustomerIdResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorUserLookupByStripeCustomerIdResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let stripe_customer_id = request.stripe_customer_id.trim();
@@ -50,7 +50,7 @@ pub async fn moderator_user_lookup_by_stripe_customer_id_handler(
.await
.map_err(|err| {
warn!("moderator_user_lookup_by_stripe_customer_id error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let users = results.into_iter().map(|row| ModeratorUserLookupByStripeCustomerIdEntry {
@@ -16,7 +16,7 @@ use mysql_queries::queries::users::user::get::lookup_user_for_moderation::{
};
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -38,11 +38,11 @@ pub async fn moderator_user_lookup_handler(
http_request: HttpRequest,
request: Json<ModeratorUserLookupRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorUserLookupSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorUserLookupSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let search = request.search.trim();
@@ -64,7 +64,7 @@ pub async fn moderator_user_lookup_handler(
let maybe_user = maybe_result
.map_err(|err| {
warn!("moderator_user_lookup error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let maybe_user_details = maybe_user.map(|user| ModeratorUserLookupUserDetails {
@@ -17,7 +17,7 @@ use mysql_queries::queries::users::user::update::set_user_ban_status::{
};
use mysql_queries::queries::users::user_profiles::get_user_profile_by_username::get_user_profile_by_username;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -58,7 +58,7 @@ pub async fn moderation_ban_user_handler(
http_request: HttpRequest,
request: Json<ModerationBanUserRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModerationBanUserSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModerationBanUserSuccessResponse>, CommonWebError> {
// 1. Require moderator with ban permissions.
let user_session = require_moderator(
@@ -67,12 +67,12 @@ pub async fn moderation_ban_user_handler(
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
if !user_session.can_ban_users {
warn!("User {} is not allowed to ban users", user_session.user_token.as_str());
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
// 2. Look up the target user by username.
@@ -83,10 +83,10 @@ pub async fn moderation_ban_user_handler(
&server_state.mysql_pool,
).await.map_err(|err| {
warn!("User lookup error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?.ok_or_else(|| {
warn!("User not found for ban: {}", username_lower);
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
let ip_address = get_request_ip(&http_request);
@@ -109,7 +109,7 @@ pub async fn moderation_ban_user_handler(
let mut transaction = server_state.mysql_pool.begin().await
.map_err(|err| {
warn!("Failed to begin transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// 4. Set ban status.
@@ -122,7 +122,7 @@ pub async fn moderation_ban_user_handler(
phantom: PhantomData,
}).await.map_err(|err| {
warn!("Failed to set user ban status: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// 5. Insert staff audit log.
@@ -136,13 +136,13 @@ pub async fn moderation_ban_user_handler(
phantom: PhantomData,
}).await.map_err(|err| {
warn!("Failed to insert staff audit log: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// 6. Commit transaction.
transaction.commit().await.map_err(|err| {
warn!("Failed to commit transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!(
@@ -7,7 +7,7 @@ use utoipa::ToSchema;
use enums::by_table::users::user_feature_flag::UserFeatureFlag;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -48,14 +48,14 @@ pub struct FeatureFlagDescriptor {
pub async fn moderator_list_all_available_user_feature_flags_handler(
http_request: HttpRequest,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorListUserFeatureFlagsResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorListUserFeatureFlagsResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
&server_state,
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let feature_flags: Vec<FeatureFlagDescriptor> = UserFeatureFlag::all_variants()
@@ -10,7 +10,7 @@ use mysql_queries::queries::users::user::get::get_user_token_by_username::get_us
use mysql_queries::queries::users::user_profiles::get_user_profile_by_token::get_user_profile_by_token;
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::session::lookup::user_session_feature_flags::UserSessionFeatureFlags;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
@@ -55,14 +55,14 @@ pub async fn moderator_list_user_feature_flags_handler(
http_request: HttpRequest,
path: Path<ListUserFeatureFlagsPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorListUserFeatureFlagsResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorListUserFeatureFlagsResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
&server_state,
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let username_or_token = path.username_or_token.trim();
@@ -74,10 +74,10 @@ pub async fn moderator_list_user_feature_flags_handler(
.await
.map_err(|err| {
warn!("Could not get user token by username: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?
.ok_or_else(|| {
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?
};
@@ -85,10 +85,10 @@ pub async fn moderator_list_user_feature_flags_handler(
.await
.map_err(|err| {
warn!("Could not get user profile by token: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?
.ok_or_else(|| {
AdvancedCommonWebError::NotFound
CommonWebError::NotFound
})?;
let user_feature_flags =
@@ -12,7 +12,7 @@ use mysql_queries::queries::user_referrals::list_global_user_referrals::{
list_global_user_referrals, ListGlobalUserReferralsArgs,
};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -40,7 +40,7 @@ pub async fn moderator_list_global_user_referrals_handler(
http_request: HttpRequest,
query: Query<ListGlobalUserReferralsQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListGlobalUserReferralsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListGlobalUserReferralsSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
@@ -48,7 +48,7 @@ pub async fn moderator_list_global_user_referrals_handler(
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let limit = query.limit
@@ -62,7 +62,7 @@ pub async fn moderator_list_global_user_referrals_handler(
.decode_cursor_expecting_name(CURSOR_NAME, cursor_str)
.map_err(|err| {
warn!("Failed to decode cursor: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
"Invalid cursor".to_string())
})?;
decoded.last_id
@@ -77,7 +77,7 @@ pub async fn moderator_list_global_user_referrals_handler(
},
).await.map_err(|err| {
warn!("Failed to list user referrals: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_cursor = records.last().map(|last| {
@@ -85,7 +85,7 @@ pub async fn moderator_list_global_user_referrals_handler(
.encode_last_id_cursor(CURSOR_NAME, last.id)
}).transpose().map_err(|err| {
warn!("Failed to encode cursor: {:?}", err);
AdvancedCommonWebError::server_error_with_message("Failed to encode cursor")
CommonWebError::server_error_with_message("Failed to encode cursor")
})?;
let referrals = records.into_iter().map(|r| {
@@ -15,7 +15,7 @@ use mysql_queries::queries::user_referrals::list_user_referrals_for_user::{
list_user_referrals_for_user, ListUserReferralsForUserArgs,
};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -45,7 +45,7 @@ pub async fn moderator_list_user_referrals_for_user_handler(
path: Path<ListUserReferralsForUserPathInfo>,
query: Query<ListUserReferralsForUserQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListUserReferralsForUserSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListUserReferralsForUserSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
@@ -53,7 +53,7 @@ pub async fn moderator_list_user_referrals_for_user_handler(
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let limit = query.limit
@@ -67,7 +67,7 @@ pub async fn moderator_list_user_referrals_for_user_handler(
.decode_cursor_expecting_name(CURSOR_NAME, cursor_str)
.map_err(|err| {
warn!("Failed to decode cursor: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
"Invalid cursor".to_string())
})?;
decoded.last_id
@@ -85,7 +85,7 @@ pub async fn moderator_list_user_referrals_for_user_handler(
},
).await.map_err(|err| {
warn!("Failed to list user referrals for user: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_cursor = records.last().map(|last| {
@@ -93,7 +93,7 @@ pub async fn moderator_list_user_referrals_for_user_handler(
.encode_last_id_cursor(CURSOR_NAME, last.id)
}).transpose().map_err(|err| {
warn!("Failed to encode cursor: {:?}", err);
AdvancedCommonWebError::server_error_with_message("Failed to encode cursor")
CommonWebError::server_error_with_message("Failed to encode cursor")
})?;
let referrals = records.into_iter().map(|r| {
@@ -11,7 +11,7 @@ use mysql_queries::queries::user_impersonation_requests::list_user_impersonation
};
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -79,7 +79,7 @@ pub async fn moderator_list_user_session_impersonation_requests_for_user_handler
path: Path<ListImpersonationRequestsPathInfo>,
query: Query<ListImpersonationRequestsQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListUserImpersonationRequestsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListUserImpersonationRequestsSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
@@ -87,7 +87,7 @@ pub async fn moderator_list_user_session_impersonation_requests_for_user_handler
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let limit = query.limit
@@ -101,7 +101,7 @@ pub async fn moderator_list_user_session_impersonation_requests_for_user_handler
.decode_cursor_expecting_name(CURSOR_NAME, cursor_str)
.map_err(|err| {
warn!("Failed to decode cursor: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
"Invalid cursor".to_string())
})?;
decoded.last_id
@@ -117,7 +117,7 @@ pub async fn moderator_list_user_session_impersonation_requests_for_user_handler
},
).await.map_err(|err| {
warn!("Failed to list impersonation requests: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_cursor = records.last().map(|last| {
@@ -125,7 +125,7 @@ pub async fn moderator_list_user_session_impersonation_requests_for_user_handler
.encode_last_id_cursor(CURSOR_NAME, last.id)
}).transpose().map_err(|err| {
warn!("Failed to encode cursor: {:?}", err);
AdvancedCommonWebError::server_error_with_message("Failed to encode cursor")
CommonWebError::server_error_with_message("Failed to encode cursor")
})?;
let impersonation_requests = records.into_iter().map(|r| {
@@ -11,7 +11,7 @@ use mysql_queries::queries::user_impersonation_requests::list_user_impersonation
};
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -73,7 +73,7 @@ pub async fn moderator_list_user_session_impersonation_requests_handler(
http_request: HttpRequest,
query: Query<ListAllImpersonationRequestsQueryParams>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListAllImpersonationRequestsSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListAllImpersonationRequestsSuccessResponse>, CommonWebError> {
let _user_session = require_moderator(
&http_request,
@@ -81,7 +81,7 @@ pub async fn moderator_list_user_session_impersonation_requests_handler(
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let limit = query.limit
@@ -95,7 +95,7 @@ pub async fn moderator_list_user_session_impersonation_requests_handler(
.decode_cursor_expecting_name(CURSOR_NAME, cursor_str)
.map_err(|err| {
warn!("Failed to decode cursor: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
"Invalid cursor".to_string())
})?;
decoded.last_id
@@ -110,7 +110,7 @@ pub async fn moderator_list_user_session_impersonation_requests_handler(
},
).await.map_err(|err| {
warn!("Failed to list impersonation requests: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_cursor = records.last().map(|last| {
@@ -118,7 +118,7 @@ pub async fn moderator_list_user_session_impersonation_requests_handler(
.encode_last_id_cursor(CURSOR_NAME, last.id)
}).transpose().map_err(|err| {
warn!("Failed to encode cursor: {:?}", err);
AdvancedCommonWebError::server_error_with_message("Failed to encode cursor")
CommonWebError::server_error_with_message("Failed to encode cursor")
})?;
let impersonation_requests = records.into_iter().map(|r| {
@@ -24,7 +24,7 @@ use mysql_queries::queries::users::user::get::lookup_user_for_moderation::{
LookupUserForModerationResult,
};
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{
require_moderator, UseDatabase,
};
@@ -68,7 +68,7 @@ pub async fn moderator_user_session_impersonation_request_handler(
http_request: HttpRequest,
request: Json<ModerationImpersonateRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModerationImpersonateSuccessResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModerationImpersonateSuccessResponse>, CommonWebError> {
// 1. Require moderator session.
let user_session = require_moderator(
@@ -77,12 +77,12 @@ pub async fn moderator_user_session_impersonation_request_handler(
UseDatabase::GrabNewConnection,
).await.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
if user_session.is_banned {
warn!("Banned moderator tried to impersonate: {}", user_session.user_token.as_str());
return Err(AdvancedCommonWebError::NotAuthorized);
return Err(CommonWebError::NotAuthorized);
}
// 2. Determine lookup strategy from the request.
@@ -104,7 +104,7 @@ pub async fn moderator_user_session_impersonation_request_handler(
user_session.user_token.as_str(),
target_user.user_token.as_str(),
);
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"Target user is banned".to_string(),
));
}
@@ -119,7 +119,7 @@ pub async fn moderator_user_session_impersonation_request_handler(
let mut transaction = server_state.mysql_pool.begin().await
.map_err(|err| {
warn!("Failed to begin transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// 8. Insert staff audit log.
@@ -133,7 +133,7 @@ pub async fn moderator_user_session_impersonation_request_handler(
phantom: PhantomData,
}).await.map_err(|err| {
warn!("Failed to insert staff audit log: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// 9. Insert impersonation request (expires in 20 minutes).
@@ -151,13 +151,13 @@ pub async fn moderator_user_session_impersonation_request_handler(
},
).await.map_err(|err| {
warn!("Failed to insert impersonation request: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// 10. Commit transaction.
transaction.commit().await.map_err(|err| {
warn!("Failed to commit transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
info!(
@@ -187,7 +187,7 @@ enum UserLookup {
/// Resolve which lookup field was provided. Exactly one must be set.
fn resolve_lookup_strategy(
request: &ModerationImpersonateRequest,
) -> Result<UserLookup, AdvancedCommonWebError> {
) -> Result<UserLookup, CommonWebError> {
let mut fields_set = 0u8;
if request.username.is_some() { fields_set += 1; }
@@ -196,13 +196,13 @@ fn resolve_lookup_strategy(
if request.username_email_or_token.is_some() { fields_set += 1; }
if fields_set == 0 {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"Provide one of: username, user_token, email_address, or username_email_or_token".to_string(),
));
}
if fields_set > 1 {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
return Err(CommonWebError::BadInputWithSimpleMessage(
"Only one lookup field should be provided".to_string(),
));
}
@@ -223,7 +223,7 @@ fn resolve_lookup_strategy(
return Ok(classify_ambiguous_lookup(value));
}
Err(AdvancedCommonWebError::BadInputWithSimpleMessage(
Err(CommonWebError::BadInputWithSimpleMessage(
"No lookup field provided".to_string(),
))
}
@@ -246,7 +246,7 @@ fn classify_ambiguous_lookup(value: &str) -> UserLookup {
async fn perform_user_lookup(
lookup: &UserLookup,
server_state: &ServerState,
) -> Result<LookupUserForModerationResult, AdvancedCommonWebError> {
) -> Result<LookupUserForModerationResult, CommonWebError> {
let maybe_user = match lookup {
UserLookup::Username(username) => {
lookup_user_for_moderation_by_username(username, &server_state.mysql_pool).await
@@ -263,11 +263,11 @@ async fn perform_user_lookup(
Ok(Some(user)) => Ok(user),
Ok(None) => {
warn!("User not found for impersonation lookup: {:?}", lookup);
Err(AdvancedCommonWebError::NotFound)
Err(CommonWebError::NotFound)
}
Err(err) => {
warn!("User lookup error: {:?}", err);
Err(AdvancedCommonWebError::from_anyhow_error(err))
Err(CommonWebError::from_anyhow_error(err))
}
}
}
@@ -12,7 +12,7 @@ use artcraft_api_defs::moderation::wallet_ledger_entries::list_wallet_ledger_ent
use mysql_queries::queries::wallet_ledger_entries::list_wallet_ledger_entries_by_wallet::list_wallet_ledger_entries_by_wallet;
use tokens::tokens::wallets::WalletToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,17 +34,17 @@ pub async fn list_wallet_ledger_entries_by_wallet_handler(
http_request: HttpRequest,
path: Path<ListWalletLedgerEntriesByWalletPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListWalletLedgerEntriesByWalletResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListWalletLedgerEntriesByWalletResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let results = list_wallet_ledger_entries_by_wallet(&path.wallet_token, &server_state.mysql_pool)
.await
.map_err(|err| {
warn!("list_wallet_ledger_entries_by_wallet error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let entries = results.into_iter().map(|row| ListWalletLedgerEntriesByWalletEntry {
@@ -12,7 +12,7 @@ use artcraft_api_defs::moderation::wallet_ledger_entries::moderator_get_wallet_l
use mysql_queries::queries::wallet_ledger_entries::get_wallet_ledger_entry_for_moderation::get_wallet_ledger_entry_for_moderation;
use tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,17 +34,17 @@ pub async fn moderator_get_wallet_ledger_entry_handler(
http_request: HttpRequest,
path: Path<ModeratorGetWalletLedgerEntryPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorGetWalletLedgerEntryResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorGetWalletLedgerEntryResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let maybe_entry = get_wallet_ledger_entry_for_moderation(&path.wallet_ledger_entry_token, &server_state.mysql_pool)
.await
.map_err(|err| {
warn!("moderator_get_wallet_ledger_entry error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let maybe_entry_details = maybe_entry.map(|entry| ModeratorGetWalletLedgerEntryDetails {
@@ -12,7 +12,7 @@ use artcraft_api_defs::moderation::wallets::list_user_wallets::{
use mysql_queries::queries::wallets::list_user_wallets_for_moderation::list_user_wallets_for_moderation;
use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,17 +34,17 @@ pub async fn list_user_wallets_handler(
http_request: HttpRequest,
path: Path<ListUserWalletsPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ListUserWalletsResponse>, AdvancedCommonWebError> {
) -> Result<Json<ListUserWalletsResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let results = list_user_wallets_for_moderation(&path.user_token, &server_state.mysql_pool)
.await
.map_err(|err| {
warn!("list_user_wallets error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let wallets = results.into_iter().map(|row| ListUserWalletsEntry {
@@ -20,7 +20,7 @@ use mysql_queries::queries::staff_audit_logs::insert_staff_audit_log::{
use mysql_queries::queries::wallets::add_durable_banked_balance_to_wallet::add_durable_banked_balance_to_wallet;
use tokens::tokens::wallets::WalletToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -44,13 +44,13 @@ pub async fn moderator_add_banked_balance_to_wallet_handler(
path: Path<ModeratorAddBankedBalanceToWalletPathInfo>,
request: Json<ModeratorAddBankedBalanceToWalletRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorAddBankedBalanceToWalletResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorAddBankedBalanceToWalletResponse>, CommonWebError> {
let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|err| {
warn!("Moderator check failed: {:?}", err);
AdvancedCommonWebError::NotAuthorized
CommonWebError::NotAuthorized
})?;
let ip_address = get_request_ip(&http_request);
@@ -66,7 +66,7 @@ pub async fn moderator_add_banked_balance_to_wallet_handler(
.await
.map_err(|err| {
warn!("moderator_add_banked_balance_to_wallet transaction begin error: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let _result = add_durable_banked_balance_to_wallet(
@@ -79,7 +79,7 @@ pub async fn moderator_add_banked_balance_to_wallet_handler(
.await
.map_err(|err| {
warn!("moderator_add_banked_balance_to_wallet error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
// Insert staff audit log.
@@ -93,14 +93,14 @@ pub async fn moderator_add_banked_balance_to_wallet_handler(
phantom: PhantomData,
}).await.map_err(|err| {
warn!("Failed to insert staff audit log: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
transaction.commit()
.await
.map_err(|err| {
warn!("moderator_add_banked_balance_to_wallet commit error: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(ModeratorAddBankedBalanceToWalletResponse {
@@ -14,7 +14,7 @@ use mysql_queries::queries::users::user::get::get_username_by_user_token::get_us
use mysql_queries::queries::wallets::create_new_wallet_for_owner_user::create_new_wallet_for_owner_user;
use mysql_queries::queries::wallets::find_primary_wallet_token_for_owner::find_primary_wallet_token_for_owner_using_connection;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -35,25 +35,25 @@ pub async fn moderator_create_wallet_for_user_handler(
http_request: HttpRequest,
request: Json<ModeratorCreateWalletForUserRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorCreateWalletForUserResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorCreateWalletForUserResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let user_token = request.user_token.as_ref()
.ok_or_else(|| AdvancedCommonWebError::BadInputWithSimpleMessage("user_token is required".to_string()))?;
.ok_or_else(|| CommonWebError::BadInputWithSimpleMessage("user_token is required".to_string()))?;
// Verify user exists
let maybe_user = get_username_by_user_token(user_token, &server_state.mysql_pool)
.await
.map_err(|err| {
warn!("moderator_create_wallet_for_user user lookup error: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
if maybe_user.is_none() {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage("User not found".to_string()));
return Err(CommonWebError::BadInputWithSimpleMessage("User not found".to_string()));
}
let namespace = request.payments_namespace.unwrap_or(PaymentsNamespace::Artcraft);
@@ -64,7 +64,7 @@ pub async fn moderator_create_wallet_for_user_handler(
.await
.map_err(|err| {
error!("Error acquiring MySQL connection: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let maybe_wallet_token = find_primary_wallet_token_for_owner_using_connection(
@@ -73,7 +73,7 @@ pub async fn moderator_create_wallet_for_user_handler(
&mut mysql_connection,
).await.map_err(|err| {
error!("Error finding wallet for user {:?}: {:?}", user_token, err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
if let Some(wallet_token) = maybe_wallet_token {
@@ -89,7 +89,7 @@ pub async fn moderator_create_wallet_for_user_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
let wallet_token = create_new_wallet_for_owner_user(
@@ -98,7 +98,7 @@ pub async fn moderator_create_wallet_for_user_handler(
&mut transaction,
).await.map_err(|err| {
error!("Error creating wallet for user {:?}: {:?}", user_token, err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
transaction
@@ -106,7 +106,7 @@ pub async fn moderator_create_wallet_for_user_handler(
.await
.map_err(|err| {
error!("Error committing MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(ModeratorCreateWalletForUserResponse {
@@ -12,7 +12,7 @@ use artcraft_api_defs::moderation::wallets::moderator_get_wallet::{
use mysql_queries::queries::wallets::get_wallet_for_moderation::get_wallet_for_moderation;
use tokens::tokens::wallets::WalletToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase};
use crate::state::server_state::ServerState;
@@ -34,17 +34,17 @@ pub async fn moderator_get_wallet_handler(
http_request: HttpRequest,
path: Path<ModeratorGetWalletPathInfo>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<ModeratorGetWalletResponse>, AdvancedCommonWebError> {
) -> Result<Json<ModeratorGetWalletResponse>, CommonWebError> {
let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection)
.await
.map_err(|_| AdvancedCommonWebError::NotAuthorized)?;
.map_err(|_| CommonWebError::NotAuthorized)?;
let maybe_wallet = get_wallet_for_moderation(&path.wallet_token, &server_state.mysql_pool)
.await
.map_err(|err| {
warn!("moderator_get_wallet error: {:?}", err);
AdvancedCommonWebError::from_anyhow_error(err)
CommonWebError::from_anyhow_error(err)
})?;
let maybe_wallet_details = maybe_wallet.map(|wallet| ModeratorGetWalletDetails {
@@ -10,7 +10,7 @@ use artcraft_router::generate::generate_image::generate_image_request_builder::G
use artcraft_router::generate::generate_image::image_generation_cost_estimate::ImageGenerationCostEstimate;
use log::warn;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::omni_gen::generate::image::hydrate_to_router_request::hydrate_to_router_request;
use crate::state::server_state::ServerState;
@@ -30,7 +30,7 @@ pub async fn omni_gen_image_cost_handler(
_http_request: HttpRequest,
request: Json<OmniGenImageCostAndGenerateRequest>,
_server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<OmniGenImageCostResponse>, AdvancedCommonWebError> {
) -> Result<Json<OmniGenImageCostResponse>, CommonWebError> {
let mut generate_request = hydrate_to_router_request(&request)?;
generate_request.provider = Provider::Artcraft; // NB: Explicitly spell this out.
@@ -70,7 +70,7 @@ fn should_use_pipeline_v2(
fn estimate_pipeline_v2_cost(
generate_request: &GenerateImageRequestBuilder,
) -> Result<ImageGenerationCostEstimate, AdvancedCommonWebError> {
) -> Result<ImageGenerationCostEstimate, CommonWebError> {
let mut builder = generate_request.clone();
builder.provider = Provider::Artcraft;
@@ -106,12 +106,12 @@ fn estimate_pipeline_v2_cost(
let mut cost = builder.build2()
.map_err(|e| {
warn!("Failed to build image cost request for pipeline v2 (fal): {}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?
.estimate_cost()
.map_err(|e| {
warn!("Failed to estimate image cost for pipeline v2 (fal): {}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
cost.cost_in_credits = cost.cost_in_usd_cents;
@@ -121,14 +121,14 @@ fn estimate_pipeline_v2_cost(
fn estimate_pipeline_v1_cost(
generate_request: &GenerateImageRequestBuilder,
) -> Result<ImageGenerationCostEstimate, AdvancedCommonWebError> {
) -> Result<ImageGenerationCostEstimate, CommonWebError> {
let mut builder = generate_request.clone();
builder.provider = Provider::Artcraft;
let plan = builder.build()
.map_err(|e| {
warn!("Failed to build image cost plan for pipeline v1: {}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?;
Ok(plan.estimate_costs())
@@ -9,7 +9,7 @@ use artcraft_router::errors::artcraft_router_error::ArtcraftRouterError;
use artcraft_router::generate::generate_video::video_generation_cost_estimate::VideoGenerationCostEstimate;
use log::warn;
use artcraft_router::api::common_video_model::CommonVideoModel;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::hydrate_router_request::hydrate_to_router_request;
use crate::state::server_state::ServerState;
@@ -29,7 +29,7 @@ pub async fn omni_gen_video_cost_handler(
_http_request: HttpRequest,
request: Json<OmniGenVideoCostAndGenerateRequest>,
_server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<OmniGenVideoCostResponse>, AdvancedCommonWebError> {
) -> Result<Json<OmniGenVideoCostResponse>, CommonWebError> {
let mut builder = hydrate_to_router_request(&request)?;
builder.provider = Provider::Artcraft;
@@ -38,12 +38,12 @@ pub async fn omni_gen_video_cost_handler(
builder.build2()
.map_err(|e| {
warn!("Failed to build2 cost estimate: {}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?
.estimate_cost()
.map_err(|e| {
warn!("Failed to estimate cost (v2): {}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?
} else {
let plan = match builder.build() {
@@ -53,12 +53,12 @@ pub async fn omni_gen_video_cost_handler(
builder.build()
.map_err(|e| {
warn!("Failed to build Fal cost plan: {}", e);
AdvancedCommonWebError::from_error(e)
CommonWebError::from_error(e)
})?
}
Err(e) => {
warn!("Failed to build cost plan: {}", e);
return Err(AdvancedCommonWebError::from_error(e));
return Err(CommonWebError::from_error(e));
}
};
plan.estimate_costs()
@@ -12,13 +12,13 @@ use enums::common::generation::common_image_model::CommonImageModel as CommonIma
use enums::common::generation::common_quality::CommonQuality as CommonQualityEnum;
use enums::common::generation::common_resolution::CommonResolution as CommonResolutionEnum;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
pub fn hydrate_to_router_request(
request: &OmniGenImageCostAndGenerateRequest,
) -> Result<GenerateImageRequestBuilder, AdvancedCommonWebError> {
) -> Result<GenerateImageRequestBuilder, CommonWebError> {
let api_model = request.model.as_ref()
.ok_or_else(|| AdvancedCommonWebError::BadInputWithSimpleMessage(
.ok_or_else(|| CommonWebError::BadInputWithSimpleMessage(
"model is required".to_string(),
))?;
@@ -57,10 +57,10 @@ pub fn hydrate_to_router_request(
fn convert_model(
model: &CommonImageModelEnum,
) -> Result<CommonImageModelRouter, AdvancedCommonWebError> {
) -> Result<CommonImageModelRouter, CommonWebError> {
let json = serde_json::to_string(model)?;
serde_json::from_str(&json).map_err(|e| {
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
format!("Unsupported image model: {}", e),
)
})
@@ -68,10 +68,10 @@ fn convert_model(
fn convert_aspect_ratio(
ar: &CommonAspectRatioEnum,
) -> Result<CommonAspectRatioRouter, AdvancedCommonWebError> {
) -> Result<CommonAspectRatioRouter, CommonWebError> {
let json = serde_json::to_string(ar)?;
serde_json::from_str(&json).map_err(|e| {
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
format!("Unsupported aspect ratio: {}", e),
)
})
@@ -79,10 +79,10 @@ fn convert_aspect_ratio(
fn convert_resolution(
res: &CommonResolutionEnum,
) -> Result<CommonResolutionRouter, AdvancedCommonWebError> {
) -> Result<CommonResolutionRouter, CommonWebError> {
let json = serde_json::to_string(res)?;
serde_json::from_str(&json).map_err(|e| {
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
format!("Unsupported resolution: {}", e),
)
})
@@ -90,10 +90,10 @@ fn convert_resolution(
fn convert_quality(
quality: &CommonQualityEnum,
) -> Result<CommonQualityRouter, AdvancedCommonWebError> {
) -> Result<CommonQualityRouter, CommonWebError> {
let json = serde_json::to_string(quality)?;
serde_json::from_str(&json).map_err(|e| {
AdvancedCommonWebError::BadInputWithSimpleMessage(
CommonWebError::BadInputWithSimpleMessage(
format!("Unsupported quality: {}", e),
)
})
@@ -29,7 +29,7 @@ use mysql_queries::queries::prompt_context_items::insert_batch_prompt_context_it
use mysql_queries::queries::prompts::insert_prompt::{insert_prompt, InsertPromptArgs};
use tokens::tokens::non_unique::debug_logs_event_token::DebugLogEventToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::omni_gen::generate::image::hydrate_to_router_request::hydrate_to_router_request;
use crate::http_server::endpoints::omni_gen::generate::image::pipeline_v1::run_pipeline_v1::{run_pipeline_v1, RunPipelineV1Args};
@@ -56,7 +56,7 @@ pub async fn omni_gen_image_generate_handler(
http_request: HttpRequest,
request: Json<OmniGenImageCostAndGenerateRequest>,
server_state: web::Data<Arc<ServerState>>,
) -> Result<Json<OmniGenImageGenerateResponse>, AdvancedCommonWebError> {
) -> Result<Json<OmniGenImageGenerateResponse>, CommonWebError> {
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
@@ -76,12 +76,12 @@ pub async fn omni_gen_image_generate_handler(
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
AdvancedCommonWebError::from(e)
CommonWebError::from(e)
})?;
let user_token = match maybe_user_session.as_ref() {
Some(session) => &session.user_token,
None => return Err(AdvancedCommonWebError::NotAuthorized),
None => return Err(CommonWebError::NotAuthorized),
};
let maybe_avt_token = server_state
@@ -95,14 +95,14 @@ pub async fn omni_gen_image_generate_handler(
.to_string();
if let Err(reason) = validate_idempotency_token_format(&idempotency_token) {
return Err(AdvancedCommonWebError::BadInputWithSimpleMessage(reason));
return Err(CommonWebError::BadInputWithSimpleMessage(reason));
}
insert_idempotency_token(&idempotency_token, &mut *mysql_connection)
.await
.map_err(|err| {
error!("Error inserting idempotency token: {:?}", err);
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
CommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// ==================== RESOLVE MEDIA TOKENS ==================== //
@@ -189,7 +189,7 @@ pub async fn omni_gen_image_generate_handler(
.await
.map_err(|err| {
error!("Error starting MySQL transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
// -- Prompt --
@@ -281,13 +281,13 @@ pub async fn omni_gen_image_generate_handler(
Ok(token) => token,
Err(err) => {
warn!("Error inserting inference job: {:?}", err);
return Err(AdvancedCommonWebError::from_error(err));
return Err(CommonWebError::from_error(err));
}
};
transaction.commit().await.map_err(|err| {
error!("Error committing transaction: {:?}", err);
AdvancedCommonWebError::from_error(err)
CommonWebError::from_error(err)
})?;
Ok(Json(OmniGenImageGenerateResponse {

Some files were not shown because too many files have changed in this diff Show More