11from fastapi import APIRouter , status , Request , Depends , HTTPException
22from uuid import uuid4
3+ from bson import ObjectId
34
45from app .utils .check_secret import check_api_key
56from app .singletons .logs_manager import LogsManager
1112from .models .create_models import CreateRequestModel , CreateResponseModel
1213from .controller .create_states import create_states
1314
15+ from .models .executed_models import ExecutedRequestModel , ExecutedResponseModel
16+ from .controller .executed_state import executed_state
17+
18+ from .models .errored_models import ErroredRequestModel , ErroredResponseModel
19+ from .controller .errored_state import errored_state
20+
21+
1422
1523logger = LogsManager ().get_logger ()
1624
@@ -52,4 +60,42 @@ async def create_state(namespace_name: str, body: CreateRequestModel, request: R
5260 logger .error (f"API key is invalid for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
5361 raise HTTPException (status_code = status .HTTP_401_UNAUTHORIZED , detail = "Invalid API key" )
5462
55- return await create_states (namespace_name , body , x_exosphere_request_id )
63+ return await create_states (namespace_name , body , x_exosphere_request_id )
64+
65+
66+ @router .post (
67+ "/{state_id}/executed" ,
68+ response_model = ExecutedResponseModel ,
69+ status_code = status .HTTP_200_OK ,
70+ response_description = "State executed successfully"
71+ )
72+ async def executed_state_route (namespace_name : str , state_id : str , body : ExecutedRequestModel , request : Request , api_key : str = Depends (check_api_key )):
73+
74+ x_exosphere_request_id = getattr (request .state , "x_exosphere_request_id" , str (uuid4 ()))
75+
76+ if api_key :
77+ logger .info (f"API key is valid for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
78+ else :
79+ logger .error (f"API key is invalid for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
80+ raise HTTPException (status_code = status .HTTP_401_UNAUTHORIZED , detail = "Invalid API key" )
81+
82+ return await executed_state (namespace_name , ObjectId (state_id ), body , x_exosphere_request_id )
83+
84+
85+ @router .post (
86+ "/{state_id}/errored" ,
87+ response_model = ErroredResponseModel ,
88+ status_code = status .HTTP_200_OK ,
89+ response_description = "State errored successfully"
90+ )
91+ async def errored_state_route (namespace_name : str , state_id : str , body : ErroredRequestModel , request : Request , api_key : str = Depends (check_api_key )):
92+
93+ x_exosphere_request_id = getattr (request .state , "x_exosphere_request_id" , str (uuid4 ()))
94+
95+ if api_key :
96+ logger .info (f"API key is valid for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
97+ else :
98+ logger .error (f"API key is invalid for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
99+ raise HTTPException (status_code = status .HTTP_401_UNAUTHORIZED , detail = "Invalid API key" )
100+
101+ return await errored_state (namespace_name , ObjectId (state_id ), body , x_exosphere_request_id )
0 commit comments