1+ # from fastapi import APIRouter, HTTPException, status
2+ # from sqlalchemy import text
3+ # from .database import SessionLocal
4+ # from .redis_client import redis_client
5+ # import json
6+
7+ # router = APIRouter(prefix="/events", tags=["replay"])
8+ # QUEUE_MAIN = "webhook:queue"
9+
10+
11+ # @router.post("/{event_id}/replay", status_code=status.HTTP_202_ACCEPTED)
12+ # def replay_event(event_id: int):
13+ # db = SessionLocal()
14+ # try:
15+ # event = db.execute(
16+ # text("""
17+ # SELECT
18+ # e.id,
19+ # e.route_id,
20+ # r.mode,
21+ # r.dev_target,
22+ # r.prod_target
23+ # FROM webhook_events e
24+ # JOIN webhook_routes r
25+ # ON e.route_id = r.id
26+ # WHERE e.id = :id
27+ # """),
28+ # {"id": event_id},
29+ # ).mappings().first()
30+
31+ # if not event:
32+ # raise HTTPException(status_code=404, detail="Event not found")
33+
34+ # delivery_target = (
35+ # event["dev_target"]
36+ # if event["mode"] == "dev"
37+ # else event["prod_target"]
38+ # )
39+
40+ # if not delivery_target:
41+ # raise HTTPException(
42+ # status_code=400,
43+ # detail="No delivery target configured for this route",
44+ # )
45+
46+ # db.execute(
47+ # text("""
48+ # UPDATE webhook_events
49+ # SET
50+ # status = 'pending',
51+ # attempt_count = 0,
52+ # last_error = NULL,
53+ # next_retry_at = NULL
54+
55+ # WHERE id = :id
56+ # """),
57+ # {
58+ # "id": event_id,
59+ # "target": delivery_target,
60+ # },
61+ # )
62+ # db.commit()
63+
64+ # redis_client.lpush(QUEUE_MAIN, str(event_id))
65+
66+ # return {"replayed": True, "event_id": event_id}
67+
68+ # finally:
69+ # db.close()
70+
71+
72+
73+
74+
75+
176from fastapi import APIRouter , HTTPException , status
277from sqlalchemy import text
378from .database import SessionLocal
479from .redis_client import redis_client
5- import json
680
781router = APIRouter (prefix = "/events" , tags = ["replay" ])
882QUEUE_MAIN = "webhook:queue"
@@ -14,35 +88,17 @@ def replay_event(event_id: int):
1488 try :
1589 event = db .execute (
1690 text ("""
17- SELECT
18- e.id,
19- e.route_id,
20- r.mode,
21- r.dev_target,
22- r.prod_target
23- FROM webhook_events e
24- JOIN webhook_routes r
25- ON e.route_id = r.id
26- WHERE e.id = :id
91+ SELECT id
92+ FROM webhook_events
93+ WHERE id = :id
2794 """ ),
2895 {"id" : event_id },
2996 ).mappings ().first ()
3097
3198 if not event :
3299 raise HTTPException (status_code = 404 , detail = "Event not found" )
33100
34- delivery_target = (
35- event ["dev_target" ]
36- if event ["mode" ] == "dev"
37- else event ["prod_target" ]
38- )
39-
40- if not delivery_target :
41- raise HTTPException (
42- status_code = 400 ,
43- detail = "No delivery target configured for this route" ,
44- )
45-
101+ # Reset event state (same as before)
46102 db .execute (
47103 text ("""
48104 UPDATE webhook_events
@@ -51,19 +107,17 @@ def replay_event(event_id: int):
51107 attempt_count = 0,
52108 last_error = NULL,
53109 next_retry_at = NULL
54-
55110 WHERE id = :id
56111 """ ),
57- {
58- "id" : event_id ,
59- "target" : delivery_target ,
60- },
112+ {"id" : event_id },
61113 )
114+
62115 db .commit ()
63116
117+ # Push to worker queue
64118 redis_client .lpush (QUEUE_MAIN , str (event_id ))
65119
66120 return {"replayed" : True , "event_id" : event_id }
67121
68122 finally :
69- db .close ()
123+ db .close ()
0 commit comments