FlaskΒΆ
import psycopg
from flask import Flask, request
from roost import Roost, job
app = Flask(__name__)
roost = Roost("postgresql://...")
@job("send_invoice")
def send_invoice(order_id: int) -> None:
...
@app.post("/orders")
def create_order():
with psycopg.connect("postgresql://...") as conn:
try:
with conn.cursor() as cur:
cur.execute("INSERT INTO orders (...) VALUES (...) RETURNING id")
row = cur.fetchone()
assert row is not None
order_id = row[0]
roost.enqueue(send_invoice, args={"order_id": order_id}, conn=conn)
conn.commit()
except Exception:
conn.rollback()
raise
return {"id": order_id}, 201