PR_IRminiSaaS / app /tasks.py
Corin1998's picture
Update app/tasks.py
f03ceb1 verified
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
@celery.task()
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()
@celery.task()
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 = []
# Email
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()