feat: add unified generation entrypoint
This commit is contained in:
@@ -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) ====================
|
||||
|
||||
Reference in New Issue
Block a user