/// <summary>
 ///     Creates an Error Response of <see cref="IResponse"/> with messages and a given error Status <see cref="ErrorResponseStatus"/>
 ///     Default error status is <see cref="ErrorResponseStatus.InternalServerError"/>
 /// </summary>
 public static IResponse Error(List <string> messages,
                               ErrorResponseStatus status = ErrorResponseStatus.InternalServerError)
 {
     return(new Response
     {
         Status = (ResponseStatus)status,
         Messages = messages ?? new List <string>()
     });
 }
 /// <summary>
 ///     Creates an Error Response of <see cref="IResponse"/> with a message and a given error Status <see cref="ErrorResponseStatus"/>
 ///     Default error status is <see cref="ErrorResponseStatus.InternalServerError"/>
 /// </summary>
 public static IResponse Error(string message,
                               ErrorResponseStatus status = ErrorResponseStatus.InternalServerError)
 {
     return(new Response
     {
         Status = (ResponseStatus)status,
         Messages = new List <string> {
             message
         }
     });
 }
 /// <summary>
 ///     Creates an Error Response of <see cref="IResponse"/> with messages and a given error Status <see cref="ErrorResponseStatus"/>
 ///     Default error status is <see cref="ErrorResponseStatus.InternalServerError"/>
 /// </summary>
 public static async Task <IResponse> ErrorAsync(List <string> messages,
                                                 ErrorResponseStatus status = ErrorResponseStatus.InternalServerError)
 {
     return(await Task.FromResult(Error(messages, status)));
 }
        public IResponseStatus <TResponse> Execute <TResponse>(IRequest <TResponse> request)
            where TResponse : IResponse, new()
        {
            var unitOfWork = IoC.Resolve <IUnitOfWork>();

            var stopwatch = new Stopwatch();

            IResponseStatus <TResponse> responseStatus;

            try
            {
                stopwatch.Start();

                var command = CommandFactory.Create(request);

                if (command.RequiresTransaction)
                {
                    unitOfWork.BeginTransaction();
                }

                LimitDbContext(request, _dbContext);
                try
                {
                    responseStatus = TryExecute(request, command);

                    if (responseStatus is OkResponseStatus <TResponse> )
                    {
                        unitOfWork.SaveChanges();

                        if (command.RequiresTransaction)
                        {
                            unitOfWork.CompleteTransaction();
                        }

                        AfterExecute(request, ((OkResponseStatus <TResponse>)responseStatus).Response, command);
                    }
                }
                catch                // (Exception e)
                {
                    if (command.RequiresTransaction)
                    {
                        unitOfWork.RollbackTransaction();
                    }

                    //ErrorLogUtils.AddError(e);

                    var error = new InternalServerResponseError();
                    responseStatus = new ErrorResponseStatus <TResponse>(error);
                }

                unitOfWork.Dispose();

                return(responseStatus);
            }
            catch (Exception e)
            {
                //ErrorLogUtils.AddError(e);
                var error = new InternalServerResponseError(e.Message);
                responseStatus = new ErrorResponseStatus <TResponse>(error);
                return(responseStatus);
            }
            finally
            {
                if (unitOfWork != null && unitOfWork.IsDisposed == false)
                {
                    unitOfWork.Dispose();
                }

                stopwatch.Stop();

                //SaveApiLogEntry(stopwatch.ElapsedMilliseconds, response ?? errResponse, request, authenticateResult.Partner);
            }
        }
 /// <summary>
 ///     Creates an Error Response with messages
 /// </summary>
 /// <param name="request"><see cref="HttpRequestMessage"/></param>
 /// <param name="messages">List of <see cref="string"/></param>
 /// <param name="status"><see cref="ErrorResponseStatus"/></param>
 /// <returns><see cref="HttpResponseMessage"/></returns>
 public static HttpResponseMessage CreateResponseError(HttpRequestMessage request, ErrorResponseStatus status,
                                                       List <string> messages)
 {
     return(CreateResponsibleMessage(request, (HttpStatusCode)status, messages));
 }
 /// <summary>
 ///     Creates an Error Response with a value and messages
 /// </summary>
 /// <param name="value">A Generic Value</param>
 /// <param name="messages">List of <see cref="string"/></param>
 /// <param name="status"><see cref="ErrorResponseStatus"/></param>
 /// <returns><see cref="HttpResponseMessage"/></returns>
 protected HttpResponseMessage CreateResponseError <T>(T value, List <string> messages, ErrorResponseStatus status = ErrorResponseStatus.InternalServerError)
 {
     return(ResponseGenerator.CreateResponseError(Request, status, messages, value));
 }
 /// <summary>
 ///     Creates an Error Response with a message
 /// </summary>
 /// /// <param name="message"><see cref="string"/></param>
 /// <param name="status"><see cref="ErrorResponseStatus"/></param>
 /// <returns><see cref="HttpResponseMessage"/></returns>
 protected HttpResponseMessage CreateResponseError(string message, ErrorResponseStatus status = ErrorResponseStatus.InternalServerError)
 {
     return(ResponseGenerator.CreateResponseError(Request, status, new List <string> {
         message
     }));
 }