public async Task <IActionResult> Post(TransaccionDtoRequest transaccionDtoRequest)
        {
            var resultadoValidacion = Extensiones.MonedaValida(transaccionDtoRequest.MonedaCompra);

            if (!string.IsNullOrWhiteSpace(resultadoValidacion))
            {
                _logger.LogError(resultadoValidacion);
                return(BadRequest(resultadoValidacion));
            }
            if (await _transaccionMoneda.GenerarTransaccion(transaccionDtoRequest))
            {
                return(Ok());
            }

            return(BadRequest());
        }
        public async Task <bool> GenerarTransaccion(TransaccionDtoRequest transaccionDtoRequest)
        {
            var result             = false;
            var primerDiaMesActual = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            var ultimoDiaMesActual = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));

            var montoMensualAcumulado = _context.Transaccion.Where(x => x.IdUsuario.Equals(transaccionDtoRequest.IdUsuario) &&
                                                                   x.MonedaCompra.Equals(transaccionDtoRequest.MonedaCompra) &&
                                                                   x.FechaTransaccion >= primerDiaMesActual && x.FechaTransaccion <= ultimoDiaMesActual)
                                        .Sum(x => x.MontoCompra);

            var cotizacionMoneda = await _cotizacionMoneda.GetCotizacion(transaccionDtoRequest.MonedaCompra);

            var montoCompra = Math.Round(transaccionDtoRequest.MontoPesosArgentinos / cotizacionMoneda.CambioVenta, 2);

            montoMensualAcumulado += montoCompra;

            var montoSobrePasaElTotalMes = false;

            switch (transaccionDtoRequest.MonedaCompra.ToLower())
            {
            case "dolar":
            {
                if (montoMensualAcumulado > MontoMaximoMesDolar)
                {
                    montoSobrePasaElTotalMes = true;
                }
                _logger.LogError("El monto para comprar dolares ha superado el maximo mensual");
                break;
            }

            case "real":
            {
                if (montoMensualAcumulado > MontoMaximoMesReal)
                {
                    montoSobrePasaElTotalMes = true;
                }
                _logger.LogError("El monto para comprar reales ha superado el maximo mensual");
                break;
            }
            }

            if (!montoSobrePasaElTotalMes)
            {
                var nuevaTransaccion = new TransaccionDto()
                {
                    IdTransaccion        = Guid.NewGuid(),
                    IdUsuario            = transaccionDtoRequest.IdUsuario,
                    MontoPesosArgentinos = transaccionDtoRequest.MontoPesosArgentinos,
                    MonedaCompra         = transaccionDtoRequest.MonedaCompra,
                    MontoCambioDia       = cotizacionMoneda.CambioVenta,
                    MontoCompra          = montoCompra,
                    FechaTransaccion     = DateTime.Now
                };
                await _context.Transaccion.AddAsync(nuevaTransaccion);

                result = await _context.SaveChangesAsync() > 0;
            }

            return(result);
        }