public IHttpActionResult GetTransactionsLog() { var transactionLog = _unitOfWork.TransactionLogs.GetAllOrderByCreationTsDesc(); List <TransactionApiOutputDto> _transactionsApiOutputDto = new List <TransactionApiOutputDto>(); foreach (var l in transactionLog) { var transactionId = _unitOfWork.Transactions.GetTransactionFromTransactionLog(l.Id); var transactionApiOutputDto = new TransactionApiOutputDto { amount = l.Amount, card_brand = l.Card_brand, card_holder_name = l.Card_holder_name, card_number_first = l.Card_number_first, card_number_last = l.Card_number_last, creation_timestamp = l.Creation_timestamp, installments = l.Installments, status_code = l.Status_code, status_reason = l.Status_reason, transaction_id = transactionId, transaction_type = l.Transaction_type, transaction_log_id = l.Id }; var errorLog = _unitOfWork.ErrorLogs.GetAllErrorsFromTransactionLog(l.Id); List <ErrorDto> _errorsDto = new List <ErrorDto>(); foreach (var e in errorLog) { var errorDto = new ErrorDto(e.Error_code, e.Error_message); _errorsDto.Add(errorDto); } transactionApiOutputDto.errors = _errorsDto; _transactionsApiOutputDto.Add(transactionApiOutputDto); } return(Ok(_transactionsApiOutputDto)); }
public IHttpActionResult GetTransactionLog(int id) { var transactionLog = _unitOfWork.TransactionLogs.SingleOrDefault(c => c.Id == id); if (transactionLog == null) { return(NotFound()); } var transactionId = _unitOfWork.Transactions.GetTransactionFromTransactionLog(id); var transactionApiOutputDto = new TransactionApiOutputDto { amount = transactionLog.Amount, card_brand = transactionLog.Card_brand, card_holder_name = transactionLog.Card_holder_name, card_number_first = transactionLog.Card_number_first, card_number_last = transactionLog.Card_number_last, creation_timestamp = transactionLog.Creation_timestamp, installments = transactionLog.Installments, status_code = transactionLog.Status_code, status_reason = transactionLog.Status_reason, transaction_id = transactionId, transaction_type = transactionLog.Transaction_type, transaction_log_id = transactionLog.Id }; var errorLog = _unitOfWork.ErrorLogs.GetAllErrorsFromTransactionLog(transactionLog.Id); List <ErrorDto> _errorsDto = new List <ErrorDto>(); foreach (var e in errorLog) { var errorDto = new ErrorDto(e.Error_code, e.Error_message); _errorsDto.Add(errorDto); } transactionApiOutputDto.errors = _errorsDto; return(Ok(transactionApiOutputDto)); }
public IHttpActionResult CreateTransaction(TransactionApiInputDto transactionApiInputDto) { //Coloca valor do parâmetro show_errors numa var booleana para uso futuro var showErros = transactionApiInputDto.show_errors; //Cria lista de erros encontrados durante a validação List <Error> errors = new List <Error>(); var transactionType = new TransactionType(); var cardBrand = new CardBrand(); var card = new Card(); var clientInDB = new Client(); decimal transAmountInDecimal = 0m; //A transação é presumida recusada inicialmente var statusCode = Constantes.scRecusada; var statusReason = Constantes.srErroInesperado; if (!ModelState.IsValid) { foreach (var e in ModelState.SelectMany(keyValuePair => keyValuePair.Value.Errors)) { errors.Add(new Error(500, "Erro Inesperado (" + e.ErrorMessage + ")")); } //errors.Add(new Error(500, "Erro Inesperado.")); } if (errors.Count == 0) { var validador = new Validador(_unitOfWork, showErros); validador.ProcessTransaction(transactionApiInputDto); statusCode = validador.statusCode; statusReason = validador.statusReason; transAmountInDecimal = validador.transAmountInDecimal; transactionType = validador.transactionType; cardBrand = validador.cardBrand; card = validador.card; clientInDB = validador.clientInDB; errors = validador.errors; } ; // *** FIM DA VALIDAÇÂO *** //___/ Cria Dto para saida da API \_____________________ var transactionApiOutputDto = new TransactionApiOutputDto(); transactionApiOutputDto.amount = transactionApiInputDto.amount; transactionApiOutputDto.card_brand = transactionApiInputDto.card_brand; transactionApiOutputDto.card_holder_name = transactionApiInputDto.card_holder_name; var cardNumberFirst = ""; var cardNumberLast = ""; if (!String.IsNullOrEmpty(transactionApiInputDto.card_number)) { cardNumberFirst = transactionApiInputDto.card_number.Substring(1, 4); if (transactionApiInputDto.card_number.Length >= 4) { cardNumberLast = transactionApiInputDto.card_number.Substring(transactionApiInputDto.card_number.Length - 4, 4); } } transactionApiOutputDto.card_number_first = cardNumberFirst; transactionApiOutputDto.card_number_last = cardNumberLast; transactionApiOutputDto.installments = transactionApiInputDto.installments; transactionApiOutputDto.transaction_type = transactionApiInputDto.transaction_type; transactionApiOutputDto.creation_timestamp = DateTime.Now; transactionApiOutputDto.status_code = statusCode; transactionApiOutputDto.status_reason = statusReason; //Gera registro da transação(transaction log) solicitada para ser salva na base de dados var transactionLog = new TransactionLog { Amount = transactionApiInputDto.amount, Card_brand = transactionApiInputDto.card_brand, Card_holder_name = transactionApiInputDto.card_holder_name, Card_number_first = cardNumberFirst, Card_number_last = cardNumberLast, Installments = transactionApiInputDto.installments, Transaction_type = transactionApiInputDto.transaction_type, Status_code = statusCode, Status_reason = statusReason, Creation_timestamp = DateTime.Now, }; //Adiciona registro de TransactionLog a base de dados _unitOfWork.TransactionLogs.Add(transactionLog); //Caso algum erro tenha sido encontrado... if (errors.Count > 0) { if (showErros) { //Passa todos os erros em errors para errorsDto List <ErrorDto> errorsDto = new List <ErrorDto>(); if (errors.Count > 0) { foreach (var e in errors) { var errorDto = new ErrorDto(e.error_code, e.error_message); errorsDto.Add(errorDto); var errorLog = new ErrorLog { TransactionLogId = transactionLog.Id, Error_code = e.error_code, Error_message = e.error_message }; _unitOfWork.ErrorLogs.Add(errorLog); } } //Adiciona erros à TransactionApiOutputDto transactionApiOutputDto.errors = errorsDto; } //Atualiza a base de dados _unitOfWork.Complete(); //Adiciona registro de TransactionLog a Dto de saida transactionApiOutputDto.transaction_log_id = transactionLog.Id; //Retorna TransactionApiPoutputDto como JSon return(Json(transactionApiOutputDto)); } // Validação Terminada com Sucesso \__________________ // Criar a transação vinculada ao cartão e coloca a data de criação var transaction = new Transaction { Amount = transAmountInDecimal, Card = card, TransactionType = transactionType, Installments = transactionApiInputDto.installments, CreationTimestamp = DateTime.Now, TransactionLogId = transactionLog.Id }; //Adiciona a transação à base de dados _unitOfWork.Transactions.Add(transaction); //Atualiza o saldo do cliente com o valor da transação clientInDB.Saldo = clientInDB.Saldo - transAmountInDecimal; //Atualiza a base de dados _unitOfWork.Complete(); //Adiciona registro de TransactionLog a Dto de saida transactionApiOutputDto.transaction_log_id = transactionLog.Id; //Atualiza a TransactionApiOutputDto com a Id da transação transactionApiOutputDto.transaction_id = transaction.Id; //Retorna TransactionApiOutputDto como Json e disponibiliza o link para a transação criada return(Created(new Uri(Request.RequestUri + "/" + transaction.Id), transactionApiOutputDto)); }