feat: add inline external generation mode
This commit is contained in:
@@ -1003,26 +1003,17 @@ fn compile_puzzle_agent_draft_tx(
|
||||
ctx: &TxContext,
|
||||
input: PuzzleDraftCompileInput,
|
||||
) -> Result<PuzzleAgentSessionSnapshot, String> {
|
||||
match (
|
||||
validate_optional_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
input.external_generation_job_id.as_deref(),
|
||||
input.external_generation_worker_id.as_deref(),
|
||||
input.external_generation_lease_token.as_deref(),
|
||||
) {
|
||||
(Some(job_id), Some(worker_id), Some(lease_token)) => {
|
||||
validate_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
job_id,
|
||||
worker_id,
|
||||
lease_token,
|
||||
&[PUZZLE_COMPILE_DRAFT_JOB_KIND],
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
None,
|
||||
)?;
|
||||
}
|
||||
(None, None, None) => {}
|
||||
_ => return Err("拼图草稿编译外部生成 guard 不完整".to_string()),
|
||||
}
|
||||
&[PUZZLE_COMPILE_DRAFT_JOB_KIND],
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
None,
|
||||
"拼图草稿编译外部生成 guard 不完整",
|
||||
)?;
|
||||
let row = get_owned_session_row(ctx, &input.session_id, &input.owner_user_id)?;
|
||||
if row.seed_text.trim().is_empty() {
|
||||
return Err("请先填写拼图作品信息".to_string());
|
||||
@@ -1073,15 +1064,16 @@ fn mark_puzzle_draft_generation_failed_tx(
|
||||
ctx: &TxContext,
|
||||
input: PuzzleDraftCompileFailureInput,
|
||||
) -> Result<PuzzleAgentSessionSnapshot, String> {
|
||||
validate_puzzle_external_generation_write_guard(
|
||||
validate_optional_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
&input.external_generation_job_id,
|
||||
&input.external_generation_worker_id,
|
||||
&input.external_generation_lease_token,
|
||||
input.external_generation_job_id.as_deref(),
|
||||
input.external_generation_worker_id.as_deref(),
|
||||
input.external_generation_lease_token.as_deref(),
|
||||
&[PUZZLE_COMPILE_DRAFT_JOB_KIND],
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
None,
|
||||
"拼图草稿失败态外部生成 guard 不完整",
|
||||
)?;
|
||||
let row = get_owned_session_row(ctx, &input.session_id, &input.owner_user_id)?;
|
||||
let updated_at = Timestamp::from_micros_since_unix_epoch(input.failed_at_micros);
|
||||
@@ -1138,11 +1130,11 @@ fn mark_puzzle_level_generation_failed_tx(
|
||||
ctx: &TxContext,
|
||||
input: PuzzleLevelGenerationFailureInput,
|
||||
) -> Result<PuzzleAgentSessionSnapshot, String> {
|
||||
validate_puzzle_external_generation_write_guard(
|
||||
validate_optional_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
&input.external_generation_job_id,
|
||||
&input.external_generation_worker_id,
|
||||
&input.external_generation_lease_token,
|
||||
input.external_generation_job_id.as_deref(),
|
||||
input.external_generation_worker_id.as_deref(),
|
||||
input.external_generation_lease_token.as_deref(),
|
||||
&[
|
||||
PUZZLE_GENERATE_IMAGES_JOB_KIND,
|
||||
PUZZLE_GENERATE_UI_BACKGROUND_JOB_KIND,
|
||||
@@ -1150,6 +1142,7 @@ fn mark_puzzle_level_generation_failed_tx(
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
input.level_id.as_deref(),
|
||||
"拼图关卡失败态外部生成 guard 不完整",
|
||||
)?;
|
||||
let row = get_owned_session_row(ctx, &input.session_id, &input.owner_user_id)?;
|
||||
let updated_at = Timestamp::from_micros_since_unix_epoch(input.failed_at_micros);
|
||||
@@ -1259,6 +1252,35 @@ fn validate_puzzle_external_generation_write_guard(
|
||||
)
|
||||
}
|
||||
|
||||
fn validate_optional_puzzle_external_generation_write_guard(
|
||||
ctx: &TxContext,
|
||||
job_id: Option<&str>,
|
||||
worker_id: Option<&str>,
|
||||
lease_token: Option<&str>,
|
||||
expected_job_kinds: &[&str],
|
||||
session_id: &str,
|
||||
owner_user_id: &str,
|
||||
level_id: Option<&str>,
|
||||
incomplete_message: &str,
|
||||
) -> Result<(), String> {
|
||||
match (job_id, worker_id, lease_token) {
|
||||
(Some(job_id), Some(worker_id), Some(lease_token)) => {
|
||||
validate_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
job_id,
|
||||
worker_id,
|
||||
lease_token,
|
||||
expected_job_kinds,
|
||||
session_id,
|
||||
owner_user_id,
|
||||
level_id,
|
||||
)
|
||||
}
|
||||
(None, None, None) => Ok(()),
|
||||
_ => Err(incomplete_message.to_string()),
|
||||
}
|
||||
}
|
||||
|
||||
fn save_puzzle_form_draft_tx(
|
||||
ctx: &TxContext,
|
||||
input: PuzzleFormDraftSaveInput,
|
||||
@@ -1316,11 +1338,11 @@ fn save_puzzle_generated_images_tx(
|
||||
ctx: &TxContext,
|
||||
input: PuzzleGeneratedImagesSaveInput,
|
||||
) -> Result<PuzzleAgentSessionSnapshot, String> {
|
||||
validate_puzzle_external_generation_write_guard(
|
||||
validate_optional_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
&input.external_generation_job_id,
|
||||
&input.external_generation_worker_id,
|
||||
&input.external_generation_lease_token,
|
||||
input.external_generation_job_id.as_deref(),
|
||||
input.external_generation_worker_id.as_deref(),
|
||||
input.external_generation_lease_token.as_deref(),
|
||||
&[
|
||||
PUZZLE_COMPILE_DRAFT_JOB_KIND,
|
||||
PUZZLE_GENERATE_IMAGES_JOB_KIND,
|
||||
@@ -1328,6 +1350,7 @@ fn save_puzzle_generated_images_tx(
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
input.level_id.as_deref(),
|
||||
"拼图图片保存外部生成 guard 不完整",
|
||||
)?;
|
||||
let row = get_owned_session_row(ctx, &input.session_id, &input.owner_user_id)?;
|
||||
let mut draft = deserialize_draft_required(&row.draft_json)?;
|
||||
@@ -1413,15 +1436,16 @@ fn save_puzzle_ui_background_tx(
|
||||
ctx: &TxContext,
|
||||
input: PuzzleUiBackgroundSaveInput,
|
||||
) -> Result<PuzzleAgentSessionSnapshot, String> {
|
||||
validate_puzzle_external_generation_write_guard(
|
||||
validate_optional_puzzle_external_generation_write_guard(
|
||||
ctx,
|
||||
&input.external_generation_job_id,
|
||||
&input.external_generation_worker_id,
|
||||
&input.external_generation_lease_token,
|
||||
input.external_generation_job_id.as_deref(),
|
||||
input.external_generation_worker_id.as_deref(),
|
||||
input.external_generation_lease_token.as_deref(),
|
||||
&[PUZZLE_GENERATE_UI_BACKGROUND_JOB_KIND],
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
input.level_id.as_deref(),
|
||||
"拼图 UI 背景保存外部生成 guard 不完整",
|
||||
)?;
|
||||
let row = get_owned_session_row(ctx, &input.session_id, &input.owner_user_id)?;
|
||||
let mut draft = deserialize_draft_required(&row.draft_json)?;
|
||||
|
||||
Reference in New Issue
Block a user