Files
life-echo/api/app/tasks/chapter_compose_tasks.py
2026-03-20 15:15:35 +08:00

44 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Celerystory 变更后重组关联章节的 canonical_markdown物化视图"""
from celery import shared_task
from sqlalchemy import select
from app.core.db import get_sync_db
from app.core.logging import get_logger
from app.features.memoir import repo as memoir_repo
from app.features.memoir.models import Chapter, ChapterStoryLink
logger = get_logger(__name__)
@shared_task(bind=True, max_retries=3, default_retry_delay=30)
def recompose_chapters_for_story(self, story_id: str) -> dict:
try:
with get_sync_db() as session:
stmt = (
select(Chapter.id)
.join(
ChapterStoryLink,
ChapterStoryLink.chapter_id == Chapter.id,
)
.where(
ChapterStoryLink.story_id == story_id,
Chapter.markdown_compose_dirty.is_(True),
)
)
ids = list(session.scalars(stmt).all())
for cid in ids:
memoir_repo.compose_chapter_from_story_links_sync(session, cid)
session.commit()
logger.info(
"recompose_chapters_for_story: story=%s recomposed_chapters=%s",
story_id,
ids,
)
return {"story_id": story_id, "recomposed_chapter_ids": ids}
except Exception as exc:
logger.warning(
"recompose_chapters_for_story failed story=%s err=%s", story_id, exc
)
raise self.retry(exc=exc) from exc