/// <summary>
        /// Close a response by adding a end date.
        /// </summary>
        /// <param name="responseObj">EventSagaReceiveResponseClosed</param>
        /// <returns>ResponseModel</returns>
        public async Task <ResponseModel> CloseResponse(ResponseCloseModel responseObj)
        {
            ResponseDAO response = await _repoResponses.GetItemAsync(responseObj.ResponseId);

            if (response == null)
            {
                throw new Exception($"No response found that matches responseid: {responseObj.ResponseId}");
            }

            string etag = response.ETag;

            response.ResponseState = RESPONSE_STATE_INACTIVE; //responseObj.State; Add for later alt states of completion
            response.EndDate       = DateTime.UtcNow;
            response.ETag          = etag;

            try
            {
                await _repoResponses.UpdateItemAsync(response);
            }
            catch (DocumentClientException e)
            {
                //Update concurrency issue, retrying
                if (e.StatusCode == HttpStatusCode.PreconditionFailed)
                {
                    return(await CloseResponse(responseObj));
                }
                throw e;
            }

            var output = _mapper.Map <ResponseModel>(response);

            return(output);
        }
        public async Task <IActionResult> CloseResponse(ResponseCloseModel responseObj)
        {
            var result = await _responseDataManager.CloseResponse(responseObj);

            IEventSagaReceiveResponseClosed newMessage = new EventSagaReceiveResponseClosed()
            {
                Response     = result,
                ActionStatus = ActionStatus.NotStarted
            };
            await _serviceBus.BusAccess.Publish(newMessage);

            return(Ok(result));
        }
Exemplo n.º 3
0
        public async Task <ResponseModel> CloseResponse(ResponseCloseModel responseObj)
        {
            RestRequest request = await PrepareQuery("Responses/Close", Method.PUT);

            request.AddParameter("application/json", JsonConvert.SerializeObject(responseObj), ParameterType.RequestBody);
            var queryResult = await _client.ExecuteTaskAsync <ResponseModel>(request);

            if (queryResult.IsSuccessful)
            {
                return(queryResult.Data);
            }
            else
            {
                _logger.LogError($"CloseResponse: Error while closing a response: {queryResult.StatusCode}");
            }
            return(null);
        }