1212from app .core .utils import get_client_ip
1313from app .domain .enums .common import SortOrder
1414from app .domain .events .event_models import EventFilter
15- from app .infrastructure .kafka .events .metadata import EventMetadata
16- from app .infrastructure .mappers import EventMapper , EventStatisticsMapper
15+ from app .infrastructure .kafka .events .metadata import AvroEventMetadata as EventMetadata
1716from app .schemas_pydantic .events import (
1817 DeleteEventResponse ,
1918 EventAggregationRequest ,
@@ -39,21 +38,30 @@ async def get_execution_events(
3938 current_user : Annotated [UserResponse , Depends (current_user )],
4039 event_service : FromDishka [EventService ],
4140 include_system_events : bool = Query (False , description = "Include system-generated events" ),
41+ limit : int = Query (100 , ge = 1 , le = 1000 ),
42+ skip : int = Query (0 , ge = 0 ),
4243) -> EventListResponse :
43- mapper = EventMapper ()
44- events = await event_service .get_execution_events (
44+ result = await event_service .get_execution_events (
4545 execution_id = execution_id ,
4646 user_id = current_user .user_id ,
4747 user_role = current_user .role ,
4848 include_system_events = include_system_events ,
49+ limit = limit ,
50+ skip = skip ,
4951 )
5052
51- if events is None :
53+ if result is None :
5254 raise HTTPException (status_code = 403 , detail = "Access denied" )
5355
54- event_responses = [EventResponse ( ** mapper . to_dict (event )) for event in events ]
56+ event_responses = [EventResponse . model_validate (event ) for event in result . events ]
5557
56- return EventListResponse (events = event_responses , total = len (event_responses ), limit = 1000 , skip = 0 , has_more = False )
58+ return EventListResponse (
59+ events = event_responses ,
60+ total = result .total ,
61+ limit = limit ,
62+ skip = skip ,
63+ has_more = result .has_more ,
64+ )
5765
5866
5967@router .get ("/user" , response_model = EventListResponse )
@@ -68,7 +76,6 @@ async def get_user_events(
6876 sort_order : SortOrder = Query (SortOrder .DESC ),
6977) -> EventListResponse :
7078 """Get events for the current user"""
71- mapper = EventMapper ()
7279 result = await event_service .get_user_events_paginated (
7380 user_id = current_user .user_id ,
7481 event_types = event_types ,
@@ -79,7 +86,7 @@ async def get_user_events(
7986 sort_order = sort_order ,
8087 )
8188
82- event_responses = [EventResponse ( ** mapper . to_dict (event ) ) for event in result .events ]
89+ event_responses = [EventResponse . model_validate (event ) for event in result .events ]
8390
8491 return EventListResponse (
8592 events = event_responses , total = result .total , limit = limit , skip = skip , has_more = result .has_more
@@ -92,7 +99,6 @@ async def query_events(
9299 filter_request : EventFilterRequest ,
93100 event_service : FromDishka [EventService ],
94101) -> EventListResponse :
95- mapper = EventMapper ()
96102 event_filter = EventFilter (
97103 event_types = [str (et ) for et in filter_request .event_types ] if filter_request .event_types else None ,
98104 aggregate_id = filter_request .aggregate_id ,
@@ -116,7 +122,7 @@ async def query_events(
116122 if result is None :
117123 raise HTTPException (status_code = 403 , detail = "Cannot query other users' events" )
118124
119- event_responses = [EventResponse ( ** mapper . to_dict (event ) ) for event in result .events ]
125+ event_responses = [EventResponse . model_validate (event ) for event in result .events ]
120126
121127 return EventListResponse (
122128 events = event_responses , total = result .total , limit = result .limit , skip = result .skip , has_more = result .has_more
@@ -130,43 +136,57 @@ async def get_events_by_correlation(
130136 event_service : FromDishka [EventService ],
131137 include_all_users : bool = Query (False , description = "Include events from all users (admin only)" ),
132138 limit : int = Query (100 , ge = 1 , le = 1000 ),
139+ skip : int = Query (0 , ge = 0 ),
133140) -> EventListResponse :
134- mapper = EventMapper ()
135- events = await event_service .get_events_by_correlation (
141+ result = await event_service .get_events_by_correlation (
136142 correlation_id = correlation_id ,
137143 user_id = current_user .user_id ,
138144 user_role = current_user .role ,
139145 include_all_users = include_all_users ,
140146 limit = limit ,
147+ skip = skip ,
141148 )
142149
143- event_responses = [EventResponse ( ** mapper . to_dict (event )) for event in events ]
150+ event_responses = [EventResponse . model_validate (event ) for event in result . events ]
144151
145- return EventListResponse (events = event_responses , total = len (event_responses ), limit = limit , skip = 0 , has_more = False )
152+ return EventListResponse (
153+ events = event_responses ,
154+ total = result .total ,
155+ limit = limit ,
156+ skip = skip ,
157+ has_more = result .has_more ,
158+ )
146159
147160
148161@router .get ("/current-request" , response_model = EventListResponse )
149162async def get_current_request_events (
150163 current_user : Annotated [UserResponse , Depends (current_user )],
151164 event_service : FromDishka [EventService ],
152165 limit : int = Query (100 , ge = 1 , le = 1000 ),
166+ skip : int = Query (0 , ge = 0 ),
153167) -> EventListResponse :
154- mapper = EventMapper ()
155168 correlation_id = CorrelationContext .get_correlation_id ()
156169 if not correlation_id :
157- return EventListResponse (events = [], total = 0 , limit = limit , skip = 0 , has_more = False )
170+ return EventListResponse (events = [], total = 0 , limit = limit , skip = skip , has_more = False )
158171
159- events = await event_service .get_events_by_correlation (
172+ result = await event_service .get_events_by_correlation (
160173 correlation_id = correlation_id ,
161174 user_id = current_user .user_id ,
162175 user_role = current_user .role ,
163176 include_all_users = False ,
164177 limit = limit ,
178+ skip = skip ,
165179 )
166180
167- event_responses = [EventResponse ( ** mapper . to_dict (event )) for event in events ]
181+ event_responses = [EventResponse . model_validate (event ) for event in result . events ]
168182
169- return EventListResponse (events = event_responses , total = len (event_responses ), limit = limit , skip = 0 , has_more = False )
183+ return EventListResponse (
184+ events = event_responses ,
185+ total = result .total ,
186+ limit = limit ,
187+ skip = skip ,
188+ has_more = result .has_more ,
189+ )
170190
171191
172192@router .get ("/statistics" , response_model = EventStatistics )
@@ -190,20 +210,18 @@ async def get_event_statistics(
190210 include_all_users = include_all_users ,
191211 )
192212
193- stats_mapper = EventStatisticsMapper ()
194- return EventStatistics (** stats_mapper .to_dict (stats ))
213+ return EventStatistics .model_validate (stats )
195214
196215
197216@router .get ("/{event_id}" , response_model = EventResponse )
198217async def get_event (
199218 event_id : str , current_user : Annotated [UserResponse , Depends (current_user )], event_service : FromDishka [EventService ]
200219) -> EventResponse :
201220 """Get a specific event by ID"""
202- mapper = EventMapper ()
203221 event = await event_service .get_event (event_id = event_id , user_id = current_user .user_id , user_role = current_user .role )
204222 if event is None :
205223 raise HTTPException (status_code = 404 , detail = "Event not found" )
206- return EventResponse ( ** mapper . to_dict (event ) )
224+ return EventResponse . model_validate (event )
207225
208226
209227@router .post ("/publish" , response_model = PublishEventResponse )
0 commit comments