From fcfc8bf4858c61300e6a87bc2c3115a550007008 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 30 Mar 2026 14:16:04 -0400 Subject: [PATCH] doc, split types --- .../src/characters/get_character.rs | 22 ++++++++++++++++-- .../src/characters/list_characters.rs | 23 +++++++++++++++++-- .../artcraft_api_defs/src/characters/mod.rs | 1 - .../src/characters/shared.rs | 23 ------------------- .../web/storyteller_web/src/docs/api_doc.rs | 22 ++++++++++++++++++ .../characters/get_character_handler.rs | 5 ++-- .../characters/list_characters_handler.rs | 7 +++--- 7 files changed, 68 insertions(+), 35 deletions(-) delete mode 100644 crates/api_clients/artcraft/artcraft_api_defs/src/characters/shared.rs diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/get_character.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/get_character.rs index 2f5277f79f..3a8a3cf7e3 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/get_character.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/get_character.rs @@ -1,7 +1,8 @@ use serde_derive::{Deserialize, Serialize}; use utoipa::ToSchema; -use crate::characters::shared::CharacterDetails; +use crate::common::responses::media_links::MediaLinks; +use enums::common::generation::common_model_type::CommonModelType; use tokens::tokens::characters::CharacterToken; /// Path parameters for getting a character. @@ -14,5 +15,22 @@ pub struct GetCharacterPathInfo { #[derive(Serialize, ToSchema)] pub struct GetCharacterResponse { pub success: bool, - pub character: CharacterDetails, + pub character: GetCharacterDetails, +} + +/// Full character details returned by the get endpoint. +#[derive(Serialize, ToSchema)] +pub struct GetCharacterDetails { + pub token: CharacterToken, + + /// Which models this character can be used with. + pub models: Vec, + + pub name: String, + + pub maybe_description: Option, + + pub maybe_avatar: Option, + + pub maybe_full_image: Option, } diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/list_characters.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/list_characters.rs index dd24047dc8..348ad2e646 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/list_characters.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/list_characters.rs @@ -1,7 +1,9 @@ use serde_derive::{Deserialize, Serialize}; use utoipa::{IntoParams, ToSchema}; -use crate::characters::shared::CharacterDetails; +use crate::common::responses::media_links::MediaLinks; +use enums::common::generation::common_model_type::CommonModelType; +use tokens::tokens::characters::CharacterToken; /// Query string parameters for listing characters. #[derive(Deserialize, IntoParams)] @@ -14,6 +16,23 @@ pub struct ListCharactersQuery { #[derive(Serialize, ToSchema)] pub struct ListCharactersResponse { pub success: bool, - pub characters: Vec, + pub characters: Vec, pub next_cursor: Option, } + +/// A character entry in the list response. +#[derive(Serialize, ToSchema)] +pub struct ListCharactersEntry { + pub token: CharacterToken, + + /// Which models this character can be used with. + pub models: Vec, + + pub name: String, + + pub maybe_description: Option, + + pub maybe_avatar: Option, + + pub maybe_full_image: Option, +} diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/mod.rs index 4f6372bcf0..bb9070c8bf 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/mod.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/mod.rs @@ -3,4 +3,3 @@ pub mod delete_character; pub mod edit_character; pub mod get_character; pub mod list_characters; -pub mod shared; diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/shared.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/characters/shared.rs deleted file mode 100644 index c3ec0e2c5e..0000000000 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/characters/shared.rs +++ /dev/null @@ -1,23 +0,0 @@ -use serde_derive::Serialize; -use utoipa::ToSchema; - -use crate::common::responses::media_links::MediaLinks; -use enums::common::generation::common_model_type::CommonModelType; -use tokens::tokens::characters::CharacterToken; - -/// Character summary used in list and get responses. -#[derive(Serialize, ToSchema)] -pub struct CharacterDetails { - pub token: CharacterToken, - - /// Which models this character can be used with. - pub models: Vec, - - pub name: String, - - pub maybe_description: Option, - - pub maybe_avatar: Option, - - pub maybe_full_image: Option, -} diff --git a/crates/service/web/storyteller_web/src/docs/api_doc.rs b/crates/service/web/storyteller_web/src/docs/api_doc.rs index cd7ef28318..f92f637378 100644 --- a/crates/service/web/storyteller_web/src/docs/api_doc.rs +++ b/crates/service/web/storyteller_web/src/docs/api_doc.rs @@ -279,6 +279,11 @@ use artcraft_api_defs::subscriptions::get_session_subscription::*; use artcraft_api_defs::media_file::list_batch_generated_media_files::*; // Handler modules with locally-defined types use crate::http_server::endpoints::moderation::info::moderator_token_info_handler::*; +use artcraft_api_defs::characters::create_character::*; +use artcraft_api_defs::characters::delete_character::*; +use artcraft_api_defs::characters::edit_character::*; +use artcraft_api_defs::characters::get_character::*; +use artcraft_api_defs::characters::list_characters::*; use artcraft_api_defs::moderation::alerts::moderation_send_alert::*; use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_image_cost_and_generate_request::*; use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_video_cost_and_generate_request::*; @@ -476,6 +481,12 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux crate::http_server::endpoints::voice_conversion::enqueue_seed_vc_inference_handler::enqueue_infer_seed_vc_handler, // TTS crate::http_server::endpoints::tts::enqueue_infer_f5_tts_handler::enqueue_infer_f5_tts_handler::enqueue_infer_f5_tts_handler, + // Characters + crate::http_server::endpoints::characters::list_characters_handler::list_characters_handler, + crate::http_server::endpoints::characters::create_character_handler::create_character_handler, + crate::http_server::endpoints::characters::get_character_handler::get_character_handler, + crate::http_server::endpoints::characters::edit_character_handler::edit_character_handler, + crate::http_server::endpoints::characters::delete_character_handler::delete_character_handler, // Omni Gen crate::http_server::endpoints::omni_gen::cost::image::omni_gen_image_cost_handler::omni_gen_image_cost_handler, crate::http_server::endpoints::omni_gen::cost::video::omni_gen_video_cost_handler::omni_gen_video_cost_handler, @@ -693,6 +704,17 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux ModeratorUserLookupRequest, ModeratorUserLookupSuccessResponse, ModeratorUserLookupUserDetails, + CreateCharacterRequest, + CreateCharacterResponse, + DeleteCharacterPathInfo, + DeleteCharacterResponse, + EditCharacterRequest, + EditCharacterResponse, + GetCharacterDetails, + GetCharacterPathInfo, + GetCharacterResponse, + ListCharactersEntry, + ListCharactersResponse, OmniGenImageCostAndGenerateRequest, OmniGenImageCostResponse, OmniGenImageGenerateResponse, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/characters/get_character_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/characters/get_character_handler.rs index 8add047290..d9c1538a79 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/characters/get_character_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/characters/get_character_handler.rs @@ -3,8 +3,7 @@ use std::sync::Arc; use actix_web::web::{Json, Path}; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::characters::get_character::{GetCharacterPathInfo, GetCharacterResponse}; -use artcraft_api_defs::characters::shared::CharacterDetails; +use artcraft_api_defs::characters::get_character::{GetCharacterDetails, GetCharacterPathInfo, GetCharacterResponse}; use enums::common::generation::common_model_type::CommonModelType; use tokens::tokens::characters::CharacterToken; @@ -31,7 +30,7 @@ pub async fn get_character_handler( _server_state: web::Data>, ) -> Result, CommonWebError> { // TODO: Replace with real implementation. - let mock_character = CharacterDetails { + let mock_character = GetCharacterDetails { token: path.character_token.clone(), models: vec![CommonModelType::Seedance2p0], name: "Mock Character".to_string(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/characters/list_characters_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/characters/list_characters_handler.rs index 78a2eaf786..9a58595b99 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/characters/list_characters_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/characters/list_characters_handler.rs @@ -3,8 +3,7 @@ use std::sync::Arc; use actix_web::web::{Json, Query}; use actix_web::{web, HttpRequest}; -use artcraft_api_defs::characters::list_characters::{ListCharactersQuery, ListCharactersResponse}; -use artcraft_api_defs::characters::shared::CharacterDetails; +use artcraft_api_defs::characters::list_characters::{ListCharactersEntry, ListCharactersQuery, ListCharactersResponse}; use enums::common::generation::common_model_type::CommonModelType; use tokens::tokens::characters::CharacterToken; @@ -30,7 +29,7 @@ pub async fn list_characters_handler( ) -> Result, CommonWebError> { // TODO: Replace with real implementation. let mock_characters = vec![ - CharacterDetails { + ListCharactersEntry { token: CharacterToken::new_from_str("character_mock_abc123"), models: vec![CommonModelType::Seedance2p0], name: "Juno".to_string(), @@ -38,7 +37,7 @@ pub async fn list_characters_handler( maybe_avatar: None, maybe_full_image: None, }, - CharacterDetails { + ListCharactersEntry { token: CharacterToken::new_from_str("character_mock_def456"), models: vec![CommonModelType::Seedance2p0], name: "Ernest".to_string(),