feat: add unified generation entrypoint

This commit is contained in:
2026-04-18 12:55:20 +08:00
parent 9e1a17fa67
commit e201fa3358
10 changed files with 358 additions and 67 deletions

View File

@@ -13,6 +13,8 @@ from app.schemas.story_schemas import (
AchievementItem,
FullStoryResponse,
GenerateRequest,
GenerationRequest,
GenerationResponse,
StorybookPageResponse,
StorybookRequest,
StorybookResponse,
@@ -385,6 +387,94 @@ async def generate_storybook_service(
audio_status=story.audio_status,
last_error=story.last_error,
)
async def generate_generation_service(
request: GenerationRequest,
user_id: str,
db: AsyncSession,
) -> GenerationResponse:
"""Unified generation workflow entry point for stories and storybooks."""
if request.output_mode == "storybook":
storybook = await generate_storybook_service(
StorybookRequest(
keywords=request.data,
page_count=request.page_count,
education_theme=request.education_theme,
generate_images=request.generate_images,
child_profile_id=request.child_profile_id,
universe_id=request.universe_id,
),
user_id,
db,
)
if storybook.id is None:
raise HTTPException(status_code=500, detail="Storybook generation did not persist.")
saved_story = await get_story_detail(storybook.id, user_id, db)
return GenerationResponse(
id=storybook.id,
title=storybook.title,
mode="storybook",
pages=storybook.pages,
cover_prompt=storybook.cover_prompt,
image_url=storybook.cover_url,
cover_url=storybook.cover_url,
main_character=storybook.main_character,
art_style=storybook.art_style,
generation_status=storybook.generation_status,
image_status=storybook.image_status,
audio_status=storybook.audio_status,
last_error=storybook.last_error,
child_profile_id=saved_story.child_profile_id,
universe_id=saved_story.universe_id,
)
generate_request = GenerateRequest(
type=request.type,
data=request.data,
education_theme=request.education_theme,
child_profile_id=request.child_profile_id,
universe_id=request.universe_id,
)
if request.generate_images:
story = await generate_full_story_service(generate_request, user_id, db)
return GenerationResponse(
id=story.id,
title=story.title,
mode=story.mode,
story_text=story.story_text,
cover_prompt=story.cover_prompt,
image_url=story.image_url,
cover_url=story.image_url,
audio_ready=story.audio_ready,
errors=story.errors,
generation_status=story.generation_status,
image_status=story.image_status,
audio_status=story.audio_status,
last_error=story.last_error,
child_profile_id=story.child_profile_id,
universe_id=story.universe_id,
)
story = await generate_and_save_story(generate_request, user_id, db)
return GenerationResponse(
id=story.id,
title=story.title,
mode=story.mode,
story_text=story.story_text,
cover_prompt=story.cover_prompt,
image_url=story.image_url,
cover_url=story.image_url,
generation_status=story.generation_status,
image_status=story.image_status,
audio_status=story.audio_status,
last_error=story.last_error,
child_profile_id=story.child_profile_id,
universe_id=story.universe_id,
)
# ==================== Missing Endpoints Logic (for Issue #5) ====================