Spaces:
Sleeping
Sleeping
| from app.celery_app import celery | |
| from app.database import SessionLocal | |
| from app import models | |
| from app.llm import generate_draft | |
| from app.utils.emailer import send_email | |
| from app.utils.x_client import post_to_x | |
| from app.utils.note_client import post_to_note | |
| def task_generate_draft(draft_id: int): | |
| db = SessionLocal() | |
| try: | |
| draft = db.get(models.Draft, draft_id) | |
| if not draft: | |
| return {"error": "draft not found"} | |
| title, body_md, subj_a, subj_b = generate_draft( | |
| draft.raw_text or "", draft.content_type.value, draft.tone.value | |
| ) | |
| draft.title = title | |
| draft.body_md = body_md | |
| draft.subject_a = subj_a | |
| draft.subject_b = subj_b | |
| draft.status = models.DraftStatus.pending | |
| db.add(draft) | |
| db.commit() | |
| db.refresh(draft) | |
| return {"id": draft.id, "status": draft.status.value} | |
| finally: | |
| db.close() | |
| def task_deliver(draft_id: int): | |
| db = SessionLocal() | |
| try: | |
| draft = db.get(models.Draft, draft_id) | |
| if not draft: | |
| return {"error": "draft not found"} | |
| results = [] | |
| if draft.deliver_email_list: | |
| recipients = [e.strip() for e in draft.deliver_email_list.split(',') if e.strip()] | |
| res = send_email(recipients, draft.subject_a or draft.title or "お知らせ", draft.subject_b or draft.title or "お知らせ", draft.body_md or "") | |
| delivery = models.Delivery(draft_id=draft.id, channel=models.DeliveryChannel.email, payload={"recipients": recipients}, result=res) | |
| db.add(delivery); db.commit(); db.refresh(delivery) | |
| results.append({"email": res}) | |
| # X | |
| if draft.deliver_x: | |
| text = f"{draft.title}\n\n{(draft.body_md or '')[:220]}" | |
| res = post_to_x(text) | |
| delivery = models.Delivery(draft_id=draft.id, channel=models.DeliveryChannel.x, payload={"text": text[:280]}, result=res) | |
| db.add(delivery); db.commit(); db.refresh(delivery) | |
| results.append({"x": res}) | |
| # note | |
| if draft.deliver_note: | |
| res = post_to_note(draft.title or "お知らせ", draft.body_md or "") | |
| delivery = models.Delivery(draft_id=draft.id, channel=models.DeliveryChannel.note, payload={"title": draft.title}, result=res) | |
| db.add(delivery); db.commit(); db.refresh(delivery) | |
| results.append({"note": res}) | |
| draft.status = models.DraftStatus.sent | |
| db.add(draft); db.commit(); db.refresh(draft) | |
| return {"id": draft.id, "results": results} | |
| finally: | |
| db.close() | |