protected IResponseStatus <TResponse> TryExecute <TResponse>(IRequest <TResponse> request, CommandFacade <TResponse> commandFacade) where TResponse : IResponse, new() { var validateResult = commandFacade.Validate(request); if (validateResult.IsValid) { try { var response = commandFacade.Execute(request); return(new OkResponseStatus <TResponse>(response)); } catch (Exception e) { //ErrorLogUtils.AddError(e); var error = new InternalServerResponseError(); return(new ErrorResponseStatus <TResponse>(error)); } } return(new ErrorResponseStatus <TResponse>(validateResult.ResponseError)); }
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); } }