fix paging endpoint

This commit is contained in:
Brandon Thomas committed 2026-03-30 19:46:27 -04:00
1 parent 37667be20c
commit 4e2e3146bd
3 files changed
+26 -67

No files matched your search

@@ -676,7 +676,6 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux
DeleteWeightError,
DeleteWeightPathInfo,
DeleteWeightRequest,
DismissFinishedSessionJobsError,
DismissFinishedSessionJobsSuccessResponse,
EditBetaKeyDistributedFlagError,
EditBetaKeyDistributedFlagPathInfo,
@@ -1,9 +1,10 @@
use actix_http::StatusCode;
use actix_web::{HttpResponse, HttpResponseBuilder, ResponseError};
use log::error;
use log::{error, warn};
use mysql_queries::errors::mysql_error::{MysqlCrateErrorSubtype, MysqlError};
use std::error::Error;
use std::fmt::{Display, Formatter};
use crate::http_server::web_utils::user_session::require_user_session::RequireUserSessionError;
#[derive(Debug, utoipa::ToSchema)]
pub enum CommonWebError {
@@ -99,6 +100,15 @@ impl <T: MysqlCrateErrorSubtype> From<MysqlError<T>> for CommonWebError {
}
}
impl From<RequireUserSessionError> for CommonWebError {
fn from(value: RequireUserSessionError) -> Self {
match value {
RequireUserSessionError::NotAuthorized => Self::NotAuthorized,
RequireUserSessionError::ServerError => Self::ServerError,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
@@ -1,16 +1,13 @@
use std::fmt;
use std::sync::Arc;
use actix_web::error::ResponseError;
use actix_web::http::StatusCode;
use actix_web::{web, HttpMessage, HttpRequest, HttpResponse};
use log::{error, warn};
use actix_web::{web, HttpMessage, HttpRequest};
use actix_web::web::Json;
use log::error;
use utoipa::ToSchema;
use mysql_queries::queries::generic_inference::web::dismiss_finished_jobs_for_user::dismiss_finished_jobs_for_user;
use mysql_queries::queries::generic_inference::web::mark_generic_inference_job_cancelled_by_user::mark_generic_inference_job_cancelled_by_user;
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_user_session::require_user_session;
use crate::state::server_state::ServerState;
@@ -19,40 +16,6 @@ pub struct DismissFinishedSessionJobsSuccessResponse {
pub success: bool,
}
#[derive(Debug, ToSchema)]
pub enum DismissFinishedSessionJobsError {
ServerError,
NotFound,
NotAuthorized,
}
impl ResponseError for DismissFinishedSessionJobsError {
fn status_code(&self) -> StatusCode {
match *self {
DismissFinishedSessionJobsError::ServerError => StatusCode::INTERNAL_SERVER_ERROR,
DismissFinishedSessionJobsError::NotFound => StatusCode::NOT_FOUND,
DismissFinishedSessionJobsError::NotAuthorized => StatusCode::UNAUTHORIZED,
}
}
fn error_response(&self) -> HttpResponse {
let error_reason = match self {
Self::ServerError => "server error".to_string(),
Self::NotFound => "not found".to_string(),
Self::NotAuthorized => "unauthorized".to_string(),
};
to_simple_json_error(&error_reason, self.status_code())
}
}
// NB: Not using derive_more::Display since Clion doesn't understand it.
impl fmt::Display for DismissFinishedSessionJobsError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
/// Mark all jobs that are finished (or that failed completely and will not retry) as dismissed.
///
/// This will prevent these jobs from being returned in the "list session jobs" endpoint.
@@ -62,46 +25,33 @@ impl fmt::Display for DismissFinishedSessionJobsError {
path = "/v1/jobs/session/dismiss_finished",
responses(
(status = 200, body = DismissFinishedSessionJobsSuccessResponse),
(status = 500, body = DismissFinishedSessionJobsError),
(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<HttpResponse, DismissFinishedSessionJobsError>
server_state: web::Data<Arc<ServerState>>) -> Result<Json<DismissFinishedSessionJobsSuccessResponse>, CommonWebError>
{
let user_session = require_user_session(&http_request, &server_state)
.await?;
// TODO(bt,2024-06-16): Reuse connection
let mut mysql_connection = server_state.mysql_pool.acquire()
.await
.map_err(|e| {
warn!("Could not acquire DB pool: {:?}", e);
DismissFinishedSessionJobsError::ServerError
})?;
let user_session = require_user_session(&http_request, &server_state)
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
DismissFinishedSessionJobsError::ServerError
error!("Could not acquire DB pool: {:?}", e);
CommonWebError::ServerError
})?;
dismiss_finished_jobs_for_user(&mut mysql_connection, &user_session.user_token)
.await
.map_err(|err| {
error!("tts job query error: {:?}", err);
DismissFinishedSessionJobsError::ServerError
CommonWebError::ServerError
})?;
let response = DismissFinishedSessionJobsSuccessResponse {
Ok(Json(DismissFinishedSessionJobsSuccessResponse {
success: true,
};
let body = serde_json::to_string(&response)
.map_err(|e| {
error!("error returning response: {:?}", e);
DismissFinishedSessionJobsError::ServerError
})?;
Ok(HttpResponse::Ok()
.content_type("application/json")
.body(body))
}))
}