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

@@ -17,6 +17,8 @@ from app.schemas.story_schemas import (
AchievementItem,
FullStoryResponse,
GenerateRequest,
GenerationRequest,
GenerationResponse,
StoryAssetRetryRequest,
StorybookRequest,
StorybookResponse,
@@ -37,13 +39,45 @@ logger = get_logger(__name__)
router = APIRouter()
RATE_LIMIT_WINDOW = 60 # seconds
RATE_LIMIT_REQUESTS = 10
@router.post("/stories/generate", response_model=StoryResponse)
async def generate_story(
request: GenerateRequest,
user: User = Depends(require_user),
RATE_LIMIT_REQUESTS = 10
@router.post("/generations", response_model=GenerationResponse)
async def create_generation(
request: GenerationRequest,
user: User = Depends(require_user),
db: AsyncSession = Depends(get_db),
):
"""Create a story or storybook through the unified generation workflow."""
await check_rate_limit(f"story:{user.id}", RATE_LIMIT_REQUESTS, RATE_LIMIT_WINDOW)
return await story_service.generate_generation_service(request, user.id, db)
@router.get("/generations/{story_id}", response_model=StoryDetailResponse)
async def get_generation(
story_id: int,
user: User = Depends(require_user),
db: AsyncSession = Depends(get_db),
):
"""Get a generated story/storybook through the unified generation API."""
return await story_service.get_story_detail(story_id, user.id, db)
@router.post("/generations/{story_id}/retry-assets", response_model=StoryDetailResponse)
async def retry_generation_assets(
story_id: int,
payload: StoryAssetRetryRequest,
user: User = Depends(require_user),
db: AsyncSession = Depends(get_db),
):
"""Retry generated assets through the unified generation API."""
return await story_service.retry_story_assets(story_id, user.id, payload.assets, db)
@router.post("/stories/generate", response_model=StoryResponse)
async def generate_story(
request: GenerateRequest,
user: User = Depends(require_user),
db: AsyncSession = Depends(get_db),
):
"""Generate or enhance a story."""