public async Task <Respuesta <IProductoCompuestoDTO> > LeerProducto(IProductoDTO productoIn)
        {
            return(await new Wrapper <IProductoCompuestoDTO>().EjecutarTransaccionAsync(async() =>
            {
                IProductoCompuestoDTO producto = await contexto.Producto
                                                 .Include(x => x.IdCategoriaNavigation)
                                                 .Include(x => x.InventarioProducto)
                                                 .Where(x => x.IdProducto == productoIn.IdProducto)
                                                 .Select(x => new ProductoCompuestoDO
                {
                    IdProducto = x.IdProducto,
                    IdCategoria = x.IdCategoria,
                    Nombre = x.Nombre,
                    Precio = x.Precio,
                    Categoria = x.IdCategoriaNavigation.Descripcion,
                    Cantidad = (int)x.InventarioProducto.FirstOrDefault().Cantidad,
                    IdInventario = x.InventarioProducto.FirstOrDefault().IdInventario
                }).FirstOrDefaultAsync <IProductoCompuestoDTO>();

                if (producto == null)
                {
                    return FabricaRespuesta <IProductoCompuestoDTO> .RespuestaSinDatos();
                }
                return FabricaRespuesta <IProductoCompuestoDTO> .RespuestaConDatos(new List <IProductoCompuestoDTO> {
                    producto
                });
            }));
        }
        public async Task <Respuesta <IProductoDTO> > EliminarProducto(IProductoDTO producto)
        {
            return(await new Wrapper <IProductoDTO>().EjecutarTransaccionAsync(async() =>
            {
                int IdProducto = await contexto.Producto.Select(Prod => Prod.IdProducto)
                                 .FirstOrDefaultAsync(x => x == producto.IdProducto);

                if (IdProducto == default)
                {
                    return FabricaRespuesta <IProductoDTO> .RespuestaEliminacionFallida();
                }
                else
                {
                    contexto.Producto.Remove(new Producto {
                        IdProducto = IdProducto
                    });
                    await contexto.SaveChangesAsync();
                    return FabricaRespuesta <IProductoDTO> .RespuestaEliminacionExitosa();
                }
            }, async() => await FabricaRespuesta <IProductoDTO> .RespuestaFallida(Mensajes.RespuestaFallida)));
        }
 public async Task <Respuesta <IProductoCompuestoDTO> > LeerProducto(IProductoDTO producto)
 {
     return(await productoDAL.LeerProducto(producto));
 }
 public async Task <Respuesta <IProductoDTO> > EliminarProducto(IProductoDTO producto)
 {
     return(await productoDAL.EliminarProducto(producto));
 }