diff --git a/crates/service/web/storyteller_web/src/api_doc.rs b/crates/service/web/storyteller_web/src/api_doc.rs index e09e57f581..95f2f6a41f 100644 --- a/crates/service/web/storyteller_web/src/api_doc.rs +++ b/crates/service/web/storyteller_web/src/api_doc.rs @@ -20,6 +20,8 @@ use crate::http_server::common_responses::user_details_lite::{DefaultAvatarInfo, use crate::http_server::endpoints::media_files::list_featured_media_files::*; use crate::http_server::endpoints::media_files::list_media_files::*; use crate::http_server::endpoints::media_files::list_media_files_for_user::*; +use crate::http_server::endpoints::media_files::upload::upload_error::MediaFileUploadError; +use crate::http_server::endpoints::media_files::upload_media_file::*; use crate::http_server::endpoints::user_bookmarks::create_user_bookmark_handler::*; use crate::http_server::endpoints::user_bookmarks::delete_user_bookmark_handler::*; use crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_entity_handler::*; @@ -34,21 +36,25 @@ use crate::http_server::endpoints::weights::update_weight::*; use crate::http_server::web_utils::response_success_helpers::*; #[derive(OpenApi)] -#[openapi(paths(crate::http_server::endpoints::voice_designer::inference::enqueue_tts_request::enqueue_tts_request, - crate::http_server::endpoints::weights::list_available_weights::list_available_weights_handler, - crate::http_server::endpoints::weights::delete_weight::delete_weight_handler, - crate::http_server::endpoints::weights::update_weight::update_weight_handler, - crate::http_server::endpoints::weights::set_model_weight_cover_image::set_model_weight_cover_image_handler, - crate::http_server::endpoints::weights::get_weight::get_weight_handler, - crate::http_server::endpoints::weights::list_weights_by_user::list_weights_by_user_handler, +#[openapi( + paths( crate::http_server::endpoints::media_files::list_featured_media_files::list_featured_media_files_handler, crate::http_server::endpoints::media_files::list_media_files::list_media_files_handler, crate::http_server::endpoints::media_files::list_media_files_for_user::list_media_files_for_user_handler, + crate::http_server::endpoints::media_files::upload_media_file::upload_media_file_handler, crate::http_server::endpoints::user_bookmarks::create_user_bookmark_handler::create_user_bookmark_handler, crate::http_server::endpoints::user_bookmarks::delete_user_bookmark_handler::delete_user_bookmark_handler, - crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_user_handler::list_user_bookmarks_for_user_handler, crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_entity_handler::list_user_bookmarks_for_entity_handler, - ),components(schemas( + crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_user_handler::list_user_bookmarks_for_user_handler, + crate::http_server::endpoints::voice_designer::inference::enqueue_tts_request::enqueue_tts_request, + crate::http_server::endpoints::weights::delete_weight::delete_weight_handler, + crate::http_server::endpoints::weights::get_weight::get_weight_handler, + crate::http_server::endpoints::weights::list_available_weights::list_available_weights_handler, + crate::http_server::endpoints::weights::list_weights_by_user::list_weights_by_user_handler, + crate::http_server::endpoints::weights::set_model_weight_cover_image::set_model_weight_cover_image_handler, + crate::http_server::endpoints::weights::update_weight::update_weight_handler, + ), + components(schemas( // Tokens UserToken,Visibility, // @@ -61,6 +67,7 @@ use crate::http_server::web_utils::response_success_helpers::*; UpdateWeightRequest,UpdateWeightRequest,UpdateWeightPathInfo,UpdateWeightRequest,UpdateWeightError, SetModelWeightCoverImageRequest,SetModelWeightCoverImageResponse,SetModelWeightCoverImagePathInfo,SetModelWeightCoverImageError, DeleteWeightPathInfo,DeleteWeightRequest,DeleteWeightError,DeleteWeightRequest,DeleteWeightError, + UploadMediaSuccessResponse,MediaFileUploadError, ListWeightError,ModelWeightForList,ListWeightError, ListAvailableWeightsQuery,ListAvailableWeightsSuccessResponse,ModelWeightForList, ListWeightsByUserError,ListWeightsByUserSuccessResponse,ListWeightsByUserPathInfo,Weight, @@ -78,5 +85,6 @@ use crate::http_server::web_utils::response_success_helpers::*; DeleteUserBookmarkPathInfo,DeleteUserBookmarkError,DeleteUserBookmarkRequest, ListUserBookmarksPathInfo,ListUserBookmarksForUserError,ListUserBookmarksForUserSuccessResponse,UserBookmarkListItem, ListUserBookmarksForEntityPathInfo,ListUserBookmarksForEntityError,ListUserBookmarksForEntitySuccessResponse,UserBookmarkForEntityListItem, - )))] + )) +)] pub struct ApiDoc; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_error.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_error.rs index 39db17e7ed..3f07d4615f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_error.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_error.rs @@ -1,10 +1,11 @@ use actix_web::error::ResponseError; use actix_web::http::StatusCode; use actix_web::HttpResponse; +use utoipa::ToSchema; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; -#[derive(Debug, Serialize)] +#[derive(Debug, Serialize, ToSchema)] pub enum MediaFileUploadError { BadInput(String), NotAuthorized, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload_media_file.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload_media_file.rs index 526cfce6d0..26a65a9f76 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload_media_file.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload_media_file.rs @@ -4,14 +4,15 @@ use std::sync::Arc; use actix_multipart::Multipart; use actix_web::{HttpRequest, HttpResponse, web}; use once_cell::sync::Lazy; +use utoipa::ToSchema; + use tokens::tokens::media_files::MediaFileToken; + use crate::http_server::endpoints::media_files::upload::process_upload_media_file::process_upload_media_file; - - use crate::http_server::endpoints::media_files::upload::upload_error::MediaFileUploadError; use crate::server_state::ServerState; -#[derive(Serialize)] +#[derive(Serialize, ToSchema)] pub struct UploadMediaSuccessResponse { pub success: bool, pub media_file_token: MediaFileToken, @@ -41,6 +42,20 @@ static ALLOWED_MIME_TYPES : Lazy> = Lazy::new(|| { ]) }); +#[utoipa::path( + post, + path = "/v1/media_files/upload", + responses( + (status = 200, description = "Success Update", body = UploadMediaSuccessResponse), + (status = 400, description = "Bad input", body = MediaFileUploadError), + (status = 401, description = "Not authorized", body = MediaFileUploadError), + (status = 429, description = "Too many requests", body = MediaFileUploadError), + (status = 500, description = "Server error", body = MediaFileUploadError), + ), + params( + ("request" = (), description = "Ask Brandon. This is form-multipart."), + ) +)] pub async fn upload_media_file_handler( http_request: HttpRequest, server_state: web::Data>,