public IActionResult Eliminar(Int32?DetalleCarritoId)
        {
            ResponseModel responseModel = new ResponseModel();

            try
            {
                if (DetalleCarritoId == null || DetalleCarritoId <= 0)
                {
                    responseModel.Codigo  = CodeEN.Warning;
                    responseModel.Mensaje = "Datos inválidos";

                    return(BadRequest(responseModel));
                }

                DetalleCarritoBL detalleCarritoBL = new DetalleCarritoBL();
                DateTime         FechaActual      = DateTime.UtcNow.AddHours(-5);

                if (detalleCarritoBL.Eliminar(DetalleCarritoId.GetValueOrDefault()))
                {
                    String clienteId = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
                    Int32  ClienteId = Int32.Parse(clienteId);

                    CarritoBL carritoBL = new CarritoBL();

                    Carrito carrito = new Carrito
                    {
                        ClienteId = ClienteId,
                        FechaUltimaActualizacion = FechaActual
                    };

                    carritoBL.Actualizar(carrito);

                    responseModel.Codigo  = CodeEN.Success;
                    responseModel.Mensaje = "Se eliminó el producto de su carrito de manera satisfactoria";

                    return(Ok(responseModel));
                }
                else
                {
                    responseModel.Codigo  = CodeEN.Error;
                    responseModel.Mensaje = "No se pudo eliminar el producto de su carrito";

                    return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
                }
            }
            catch (Exception ex)
            {
                responseModel.Codigo  = CodeEN.Exception;
                responseModel.Mensaje = "Ocurrió una excepción";

                return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
            }
        }
        public IActionResult Registrar([FromBody] RegistroModel registroModel)
        {
            ResponseModel responseModel = new ResponseModel();

            try
            {
                if (registroModel == null)
                {
                    responseModel.Codigo  = CodeEN.Warning;
                    responseModel.Mensaje = "Datos inválidos";

                    return(BadRequest(responseModel));
                }

                Tuple <Boolean, String> Valid = registroModel.Validate();

                if (!Valid.Item1)
                {
                    responseModel.Codigo  = CodeEN.Warning;
                    responseModel.Mensaje = Valid.Item2;

                    return(BadRequest(responseModel));
                }

                DateTime         FechaActual      = DateTime.UtcNow.AddHours(-5);
                DetalleCarritoBL detalleCarritoBL = new DetalleCarritoBL();

                String carritoId = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.GivenName)?.Value;
                Int32  CarritoId = Int32.Parse(carritoId);

                DetalleCarrito detalleCarrito = new DetalleCarrito
                {
                    CarritoId  = CarritoId,
                    Cantidad   = registroModel.Cantidad,
                    ProductoId = registroModel.ProductoId
                };

                Int32 DetalleCarritoId = detalleCarritoBL.Registrar(detalleCarrito);

                if (DetalleCarritoId > 0)
                {
                    String clienteId = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
                    Int32  ClienteId = Int32.Parse(clienteId);

                    CarritoBL carritoBL = new CarritoBL();

                    Carrito carrito = new Carrito
                    {
                        ClienteId = ClienteId,
                        FechaUltimaActualizacion = FechaActual
                    };

                    carritoBL.Actualizar(carrito);

                    responseModel.Codigo  = CodeEN.Success;
                    responseModel.Mensaje = "Se agregó el producto al carrito de manera satisfactoria";


                    return(Ok(responseModel));
                }
                else
                {
                    responseModel.Codigo  = CodeEN.Error;
                    responseModel.Mensaje = "No se pudo agregar el producto al carrito";

                    return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
                }
            }
            catch (Exception ex)
            {
                responseModel.Codigo  = CodeEN.Exception;
                responseModel.Mensaje = "Ocurrió una excepción";

                return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
            }
        }
        public IActionResult Registrar([FromBody] RegistroModel registroModel)
        {
            ResponseModel responseModel = new ResponseModel();

            try
            {
                if (registroModel == null)
                {
                    responseModel.Codigo  = CodeEN.Warning;
                    responseModel.Mensaje = "Datos inválidos";

                    return(BadRequest(responseModel));
                }

                Tuple <Boolean, String> Valid = registroModel.Validate();

                if (!Valid.Item1)
                {
                    responseModel.Codigo  = CodeEN.Warning;
                    responseModel.Mensaje = Valid.Item2;

                    return(BadRequest(responseModel));
                }


                String contrasenaCodificada = GenerarCodigoHuffman(registroModel.Contrasena.Trim());

                ClienteBL clienteBL = new ClienteBL();

                Cliente clienteConsultado = clienteBL.Consultar(registroModel.Cuenta.Trim());

                if (clienteConsultado != null)
                {
                    responseModel.Codigo  = CodeEN.Error;
                    responseModel.Mensaje = "Ya existe esta cuenta";

                    return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
                }

                Cliente cliente = new Cliente
                {
                    Cuenta     = registroModel.Cuenta.Trim(),
                    Nombre     = registroModel.Nombre.Trim(),
                    Apellido   = registroModel.Apellido.Trim(),
                    Contrasena = contrasenaCodificada,
                    Estado     = "1"
                };

                Int32 ClienteId = clienteBL.Registrar(cliente);

                if (ClienteId <= 0)
                {
                    responseModel.Codigo  = CodeEN.Error;
                    responseModel.Mensaje = "No se pudo registrar su cuenta";
                    responseModel.Data    = null;

                    return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
                }

                CarritoBL carritoBL = new CarritoBL();

                carritoBL.Registrar(ClienteId);

                responseModel.Codigo  = CodeEN.Success;
                responseModel.Mensaje = "Se registró su cuenta de manera satisfactoria";

                return(Ok(responseModel));
            }
            catch (Exception)
            {
                responseModel.Codigo  = CodeEN.Exception;
                responseModel.Mensaje = "Ocurrió una excepción";

                return(StatusCode(StatusCodes.Status500InternalServerError, responseModel));
            }
        }