Spaces:
Sleeping
Sleeping
File size: 2,668 Bytes
b002e56 f03ceb1 b002e56 f03ceb1 b002e56 f03ceb1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 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()
|