3535import com .restfiddle .constant .NodeType ;
3636import com .restfiddle .dao .ConversationRepository ;
3737import com .restfiddle .dao .NodeRepository ;
38+ import com .restfiddle .dao .RfRequestRepository ;
3839import com .restfiddle .dao .util .ConversationConverter ;
3940import com .restfiddle .dto .ConversationDTO ;
4041import com .restfiddle .dto .NodeStatusResponseDTO ;
@@ -59,30 +60,45 @@ public class ApiController {
5960
6061 @ Autowired
6162 private NodeRepository nodeRepository ;
62-
63+
6364 @ Autowired
6465 private ConversationRepository conversationRepository ;
6566
67+ @ Autowired
68+ private RfRequestRepository rfRequestRepository ;
69+
6670 @ RequestMapping (value = "/api/processor" , method = RequestMethod .POST , headers = "Accept=application/json" )
6771 RfResponseDTO requestProcessor (@ RequestBody RfRequestDTO rfRequestDTO ) {
68- //GenericHandler handler = requestHandler.getHandler(rfRequestDTO.getMethodType());
72+ Conversation existingConversation = null ;
73+ Conversation conversationForLogging = null ;
6974
70- long startTime = System .currentTimeMillis ();
75+ // TODO : Get RfRequest Id if present as part of this request and update the existing conversation entity.
76+ // Note : New conversation entity which is getting created below is still required for logging purpose.
7177
72- RfResponseDTO result = genericHandler .processHttpRequest (rfRequestDTO );
78+ if (rfRequestDTO == null ) {
79+ return null ;
80+ } else if (rfRequestDTO .getId () != null && rfRequestDTO .getId () > 0 ) {
81+ RfRequest rfRequest = rfRequestRepository .findOne (rfRequestDTO .getId ());
82+ existingConversation = rfRequest .getItem ();
83+ }
7384
85+ long startTime = System .currentTimeMillis ();
86+ RfResponseDTO result = genericHandler .processHttpRequest (rfRequestDTO );
7487 long endTime = System .currentTimeMillis ();
75-
7688 long duration = endTime - startTime ;
7789
78- Conversation conversation = ConversationConverter .convertToEntity (rfRequestDTO , result );
79-
80- conversation .setDuration (duration );
90+ conversationForLogging = ConversationConverter .convertToEntity (rfRequestDTO , result );
91+ conversationForLogging .setDuration (duration );
8192
82- // TODO : Support all the databases.
83- // TODO : Use Item controller here.
8493 try {
85- conversationRepository .save (conversation );
94+ conversationForLogging = conversationRepository .save (conversationForLogging );
95+ // Note : existingConversation will be null if the request was not saved previously.
96+ if (existingConversation != null ) {
97+ existingConversation .setRfRequest (conversationForLogging .getRfRequest ());
98+ existingConversation .setRfResponse (conversationForLogging .getRfResponse ());
99+ existingConversation .setDuration (duration );
100+ }
101+
86102 } catch (InvalidDataAccessResourceUsageException e ) {
87103 throw new ApiException ("Please use sql as datasource, some of features are not supported by hsql" , e );
88104 }
@@ -91,7 +107,7 @@ RfResponseDTO requestProcessor(@RequestBody RfRequestDTO rfRequestDTO) {
91107 result .setItemDTO (conversationDTO );
92108 return result ;
93109 }
94-
110+
95111 /**
96112 * TODO : This API may not work for in-memory database (in some cases).
97113 */
@@ -101,7 +117,7 @@ List<NodeStatusResponseDTO> runProjectById(@PathVariable("id") Long id) {
101117 logger .debug ("Running all requests inside project : " + id );
102118 List <NodeStatusResponseDTO > nodeStatuses = new ArrayList <NodeStatusResponseDTO >();
103119 NodeStatusResponseDTO nodeStatus = null ;
104-
120+
105121 List <BaseNode > listOfNodes = nodeRepository .findNodesFromAProject (id );
106122 for (BaseNode baseNode : listOfNodes ) {
107123 String nodeType = baseNode .getNodeType ();
@@ -119,11 +135,11 @@ List<NodeStatusResponseDTO> runProjectById(@PathVariable("id") Long id) {
119135 rfRequestDTO .setMethodType (methodType );
120136 rfRequestDTO .setApiUrl (apiUrl );
121137 rfRequestDTO .setApiBody (apiBody );
122-
138+
123139 RfResponseDTO rfResponseDTO = requestProcessor (rfRequestDTO );
124140 logger .debug (baseNode .getName () + " ran with status : " + rfResponseDTO .getStatus ());
125141 ConversationDTO conversationDTO = rfResponseDTO .getItemDTO ();
126-
142+
127143 nodeStatus = new NodeStatusResponseDTO ();
128144 nodeStatus .setId (baseNode .getId ());
129145 nodeStatus .setName (baseNode .getName ());
0 commit comments