diff --git a/crates/lib/mysql_queries/src/payloads/prompt_args/prompt_inner_payload.rs b/crates/lib/mysql_queries/src/payloads/prompt_args/prompt_inner_payload.rs index 3d77299496..f6625d38e4 100644 --- a/crates/lib/mysql_queries/src/payloads/prompt_args/prompt_inner_payload.rs +++ b/crates/lib/mysql_queries/src/payloads/prompt_args/prompt_inner_payload.rs @@ -1,3 +1,5 @@ +use errors::AnyhowResult; + use crate::payloads::prompt_args::encoded_style_transfer_name::EncodedStyleTransferName; // TODO(bt,2024-04-13): Once this gets big enough, design a PromptInnerPayloadBuilder that returns None if no fields were set. @@ -12,3 +14,13 @@ pub struct PromptInnerPayload { #[serde(skip_serializing_if = "Option::is_none")] pub style_name: Option, } + +impl PromptInnerPayload{ + pub fn from_json(json: &str) -> AnyhowResult { + Ok(serde_json::from_str(json)?) + } + + pub fn to_json(&self) -> AnyhowResult { + Ok(serde_json::to_string(self)?) + } +} diff --git a/crates/lib/mysql_queries/src/queries/prompts/get_prompt.rs b/crates/lib/mysql_queries/src/queries/prompts/get_prompt.rs index f0e67b8614..7782c46198 100644 --- a/crates/lib/mysql_queries/src/queries/prompts/get_prompt.rs +++ b/crates/lib/mysql_queries/src/queries/prompts/get_prompt.rs @@ -12,6 +12,8 @@ use errors::AnyhowResult; use tokens::tokens::prompts::PromptToken; use tokens::tokens::users::UserToken; +use crate::payloads::prompt_args::prompt_inner_payload::PromptInnerPayload; + #[derive(Serialize, Debug)] pub struct Prompt { pub token: PromptToken, @@ -23,8 +25,7 @@ pub struct Prompt { pub maybe_positive_prompt: Option, pub maybe_negative_prompt: Option, - // TODO(bt,2024-02-22): Expose this as structured fields. - pub maybe_other_args: Option, + pub maybe_other_args: Option, /// For moderators only pub creator_ip_address: Option, @@ -43,7 +44,6 @@ pub struct PromptRaw { pub maybe_positive_prompt: Option, pub maybe_negative_prompt: Option, - // TODO(bt,2024-02-22): Expose this as structured fields. pub maybe_other_args: Option, /// For moderators only @@ -75,7 +75,10 @@ pub async fn get_prompt( maybe_creator_user_token: record.maybe_creator_user_token, maybe_positive_prompt: record.maybe_positive_prompt, maybe_negative_prompt: record.maybe_negative_prompt, - maybe_other_args: record.maybe_other_args, + maybe_other_args: record.maybe_other_args + .as_deref() + .map(|args| PromptInnerPayload::from_json(args)) + .transpose()?, creator_ip_address: record.creator_ip_address, created_at: record.created_at, })) diff --git a/crates/lib/mysql_queries/src/queries/prompts/insert_prompt.rs b/crates/lib/mysql_queries/src/queries/prompts/insert_prompt.rs index 4333b37d0d..5d45acc48a 100644 --- a/crates/lib/mysql_queries/src/queries/prompts/insert_prompt.rs +++ b/crates/lib/mysql_queries/src/queries/prompts/insert_prompt.rs @@ -1,6 +1,6 @@ use std::marker::PhantomData; -use anyhow::anyhow; +use anyhow::anyhow; use sqlx; use sqlx::{Executor, MySql}; @@ -8,6 +8,7 @@ use enums::by_table::prompts::prompt_type::PromptType; use errors::AnyhowResult; use tokens::tokens::prompts::PromptToken; use tokens::tokens::users::UserToken; + use crate::payloads::prompt_args::prompt_inner_payload::PromptInnerPayload; pub struct InsertPromptArgs<'e, 'c, E> @@ -47,7 +48,7 @@ pub async fn insert_prompt<'e, 'c : 'e, E>(args: InsertPromptArgs<'e, 'c, E>) let maybe_other_args = match args.maybe_other_args { None => None, Some(inner_payload) => { - let encoded = serde_json::ser::to_string(inner_payload) + let encoded = inner_payload.to_json() .map_err(|_e| anyhow!("could not encode inner payload"))?; Some(encoded) }, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs index 623b81f6ac..96e2625f28 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs @@ -130,12 +130,21 @@ pub async fn get_prompt_handler( Ok(Some(result)) => result, }; + let mut maybe_style_name = None; + + if let Some(inner_payload) = &result.maybe_other_args { + if let Some(encoded_style_name) = &inner_payload.style_name { + maybe_style_name = encoded_style_name.to_style_name(); + } + } + let response = GetPromptSuccessResponse { success: true, prompt: PromptInfo { token: result.token, maybe_positive_prompt: result.maybe_positive_prompt, maybe_negative_prompt: result.maybe_negative_prompt, + maybe_style_name, prompt_type: result.prompt_type, created_at: result.created_at, },