Skip to content

Commit e4f1167

Browse files
committed
feat: create target button is now working
1 parent d1609c2 commit e4f1167

6 files changed

Lines changed: 821 additions & 222 deletions

File tree

services/api/delivery_targets.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,26 @@ def test_delivery_target(target_id: str, user_id: str = Depends(get_current_user
414414
db.close()
415415

416416

417+
418+
@router.get("/{id}/logs")
419+
def get_target_logs(id: str, user_id: str = Depends(get_current_user)):
420+
db = SessionLocal()
421+
try:
422+
rows = db.execute(
423+
text("""
424+
SELECT *
425+
FROM delivery_logs
426+
WHERE target_id = :id
427+
ORDER BY created_at DESC
428+
LIMIT 50
429+
"""),
430+
{"id": id}
431+
).fetchall()
432+
433+
return {"items": [dict(r._mapping) for r in rows]}
434+
finally:
435+
db.close()
436+
417437
@router.get("/{target_id}/stats")
418438
def get_target_stats(target_id: str, user_id: str = Depends(get_current_user)):
419439
db = SessionLocal()

services/api/events.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,30 @@ def get_dlq_count(
138138

139139
return {"dlq_count": result[0] if result else 0}
140140

141+
finally:
142+
db.close()
143+
144+
145+
146+
147+
@router.get("/{id}/deliveries")
148+
def get_event_deliveries(id: int, user_id: str = Depends(get_current_user)):
149+
db = SessionLocal()
150+
try:
151+
rows = db.execute(
152+
text("""
153+
SELECT dl.*, dt.name as target_name
154+
FROM delivery_logs dl
155+
JOIN delivery_targets dt ON dl.target_id = dt.id
156+
JOIN webhook_events e ON dl.event_id = e.id
157+
JOIN webhook_routes r ON e.route_id = r.id
158+
WHERE dl.event_id = :id
159+
AND r.user_id = :user_id
160+
ORDER BY dl.created_at DESC
161+
"""),
162+
{"id": id, "user_id": user_id}
163+
).fetchall()
164+
165+
return {"items": [dict(r._mapping) for r in rows]}
141166
finally:
142167
db.close()

services/api/replay.py

Lines changed: 83 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,82 @@
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+
176
from fastapi import APIRouter, HTTPException, status
277
from sqlalchemy import text
378
from .database import SessionLocal
479
from .redis_client import redis_client
5-
import json
680

781
router = APIRouter(prefix="/events", tags=["replay"])
882
QUEUE_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

Comments
 (0)