예제 #1
0
        public async Task <GerarCodigoResponse> GerarCodigo(GerarCodigoRequest request)
        {
            GerarCodigoResponse response = new GerarCodigoResponse();

            try
            {
                ValidationResult validationResult = request.Validate();
                if (!validationResult.IsValid)
                {
                    response.Valido = false;
                    foreach (ValidationFailure failure in validationResult.Errors)
                    {
                        response.AdicionarMensagemErro(TipoMensagem.Validacao, failure.ErrorMessage);
                    }
                }
                else
                {
                    string     correlationId = request.GetHeader(Const.CorrelationID);
                    PostagemId postagemId    = request.Map();
                    Postagem   postagem      = await _postagemFactory.Gerar(postagemId, correlationId);

                    await postagem.CancelarCodigoExistente(correlationId);

                    BusinessResult result = await postagem.CriarCodigo(correlationId);

                    if (!result.Valido)
                    {
                        response.Valido = result.Valido;
                        response.AdicionarMensagemErro(TipoMensagem.ErroNegocio, result.Mensagens.First().Conteudo);
                    }
                    else
                    {
                        await postagem.AtualizarCodigo(correlationId);

                        response.Postagem = postagem;
                    }
                }
            }
            catch (ApplicationException appEx)
            {
                response.Valido = false;
                response.AdicionarMensagemErro(TipoMensagem.ErroNegocio, appEx.Message);
            }
            catch (Exception ex)
            {
                response.Valido = false;
                response.AdicionarMensagemErro(TipoMensagem.ErroAplicacao, ex.StackTrace);
            }
            return(response);
        }