1010from app .core .exceptions import IntegrationException
1111from app .core .tracing import EventAttributes , add_span_attributes
1212from app .core .utils import get_client_ip
13- from app .domain .enums .common import ErrorType
1413from app .domain .enums .events import EventType
1514from app .domain .enums .execution import ExecutionStatus
16- from app .domain .enums .storage import ExecutionErrorType
1715from app .domain .enums .user import UserRole
1816from app .infrastructure .kafka .events .base import BaseEvent
1917from app .infrastructure .kafka .events .metadata import EventMetadata
3028 ExecutionResponse ,
3129 ExecutionResult ,
3230 ResourceLimits ,
33- ResourceUsage ,
3431 RetryExecutionRequest ,
3532)
3633from app .schemas_pydantic .user import UserResponse
@@ -54,35 +51,7 @@ async def get_execution_with_access(
5451 if domain_exec .user_id and domain_exec .user_id != current_user .user_id and current_user .role != UserRole .ADMIN :
5552 raise HTTPException (status_code = 403 , detail = "Access denied" )
5653
57- # Map domain to Pydantic for dependency consumer
58- ru = None
59- if domain_exec .resource_usage is not None :
60- ru = ResourceUsage (** vars (domain_exec .resource_usage ))
61- # Map error_type to public ErrorType in API model via mapper rules
62- error_type = (
63- (
64- ErrorType .SCRIPT_ERROR
65- if domain_exec .error_type == ExecutionErrorType .SCRIPT_ERROR
66- else ErrorType .SYSTEM_ERROR
67- )
68- if domain_exec .error_type is not None
69- else None
70- )
71- return ExecutionInDB (
72- execution_id = domain_exec .execution_id ,
73- script = domain_exec .script ,
74- status = domain_exec .status ,
75- stdout = domain_exec .stdout ,
76- stderr = domain_exec .stderr ,
77- lang = domain_exec .lang ,
78- lang_version = domain_exec .lang_version ,
79- resource_usage = ru ,
80- user_id = domain_exec .user_id ,
81- exit_code = domain_exec .exit_code ,
82- error_type = error_type ,
83- created_at = domain_exec .created_at ,
84- updated_at = domain_exec .updated_at ,
85- )
54+ return ExecutionInDB .model_validate (domain_exec )
8655
8756
8857@router .post ("/execute" , response_model = ExecutionResponse )
@@ -268,24 +237,14 @@ async def retry_execution(
268237async def get_execution_events (
269238 execution : Annotated [ExecutionInDB , Depends (get_execution_with_access )],
270239 event_service : FromDishka [EventService ],
271- event_types : str | None = Query (None , description = "Comma-separated event types to filter" ),
240+ event_types : list [ EventType ] | None = Query (None , description = "Event types to filter" ),
272241 limit : int = Query (100 , ge = 1 , le = 1000 ),
273242) -> list [ExecutionEventResponse ]:
274243 """Get all events for an execution."""
275- event_type_list = None
276- if event_types :
277- event_type_list = [t .strip () for t in event_types .split ("," )]
278-
279244 events = await event_service .get_events_by_aggregate (
280- aggregate_id = execution .execution_id , event_types = event_type_list , limit = limit
245+ aggregate_id = execution .execution_id , event_types = event_types , limit = limit
281246 )
282-
283- return [
284- ExecutionEventResponse (
285- event_id = event .event_id , event_type = event .event_type , timestamp = event .timestamp , payload = event .payload
286- )
287- for event in events
288- ]
247+ return [ExecutionEventResponse .model_validate (e ) for e in events ]
289248
290249
291250@router .get ("/user/executions" , response_model = ExecutionListResponse )
@@ -336,7 +295,7 @@ async def get_k8s_resource_limits(
336295) -> ResourceLimits :
337296 try :
338297 limits = await execution_service .get_k8s_resource_limits ()
339- return ResourceLimits ( ** vars ( limits ) )
298+ return ResourceLimits . model_validate ( limits )
340299 except Exception as e :
341300 raise HTTPException (status_code = 500 , detail = "Failed to retrieve resource limits" ) from e
342301
0 commit comments