11from fastapi import APIRouter , status
22from app .models .event import EventIn
3+ from app .db import database
34from app .core .logging import get_logger
5+ import json
46
57router = APIRouter (prefix = "/events" , tags = ["events" ])
68logger = get_logger ("eventrelay.events" )
79
810@router .post ("" , status_code = status .HTTP_202_ACCEPTED )
911async def ingest_event (event : EventIn ):
10- logger .info (
11- "event_recieved" ,
12- extra = {
13- "extra" : {
14- "source" : event .source ,
15- "type" : event .type ,
16- "timestamp" : event .timestamp .isoformat (),
17- }
18- },
19- )
12+ query = """
13+ INSERT INTO events(source, type, payload)
14+ VALUES (:source, :type, :payload)
15+ RETURNING id;
16+ """
17+ # Convert payload dict to JSON string for JSONB column
18+ values = event .dict ()
19+ values ['payload' ] = json .dumps (values ['payload' ])
20+
21+ event_id = await database .execute (query = query , values = values )
22+
23+ logger .info (f"Stored event id={ event_id } source={ event .source } type={ event .type } " )
2024
2125 return {
2226 "status" : "accepted" ,
23- "event_type" : event .type ,
24- }
27+ "id" : event_id ,
28+ }
29+
30+ @router .get ("" )
31+ async def get_all_events ():
32+ query = "SELECT * FROM events"
33+
34+ events = await database .fetch_all (query = query )
35+
36+ logger .info (f"Retrieved all events" )
37+
38+ return events
0 commit comments