Beispiel #1
0
        public IActionResult Create([FromBody] CustomerDto customerDto)
        {
            Notification notification = new Notification();
            bool         uowStatus    = false;

            try
            {
                uowStatus = _unitOfWork.BeginTransaction();

                Customer customer = _customerAssembler.FromCustomerDtoToCustomer(customerDto);
                notification = customer.ValidateForSave();

                if (notification.HasErrors())
                {
                    logger.Message(notification.ErrorMessage(), LogLevel.FunctionalError);
                    return(BadRequest(responseHandler.getAppCustomErrorResponse(notification.ErrorMessage())));
                }

                Specification <Customer> specification = GetUniqueCustomer(customer.Document_Number);
                var uniqueCustomer = _customerRepository.GetUniqueCustomer(specification);

                if (uniqueCustomer != null)
                {
                    notification.AddError("Customer already registered");
                    return(BadRequest(responseHandler.getAppCustomErrorResponse(notification.ErrorMessage())));
                }

                customer.Status = 1;
                _customerRepository.Create(customer);
                _unitOfWork.Commit(uowStatus);

                var message = "Customer " + customer.Id + " created!";
                KipubitRabbitMQ.SendMessage(message);
                logger.Message(message, LogLevel.FunctionalMessage);

                return(Ok(responseHandler.getOkCommandResponse(message, StatusCodes.Status201Created)));
            }
            catch (ArgumentException ex)
            {
                logger.Message(ex.Message, LogLevel.Error);
                return(BadRequest(responseHandler.getAppCustomErrorResponse(ex.Message)));
            }
            catch (Exception ex)
            {
                _unitOfWork.Rollback(uowStatus);
                Console.WriteLine(ex.StackTrace);
                logger.Message(ex.StackTrace, LogLevel.Debug);
                return(StatusCode(StatusCodes.Status500InternalServerError, responseHandler.getAppExceptionResponse()));
            }
        }