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 <IProductoCompuestoDTO> > ActualizarProducto(IProductoCompuestoDTO producto)
        {
            return(await new Wrapper <IProductoCompuestoDTO>().EjecutarTransaccionAsync(async() =>
            {
                InventarioProducto inventario = await contexto.InventarioProducto
                                                .FirstOrDefaultAsync(pro => pro.IdProducto == producto.IdProducto);

                inventario.Cantidad = producto.Cantidad;

                contexto.Entry(mapper.Map <Producto>(producto)).State = EntityState.Modified;
                contexto.Entry(inventario).State = EntityState.Modified;
                await contexto.SaveChangesAsync();
                return FabricaRespuesta <IProductoCompuestoDTO> .RespuestaEdicionExitosa(new List <IProductoCompuestoDTO> {
                    producto
                });
            }, async() => await FabricaRespuesta <IProductoCompuestoDTO> .RespuestaFallida(Mensajes.ErrorEnEdición)));
        }
        public async Task <Respuesta <IProductoCompuestoDTO> > CrearProducto(IProductoCompuestoDTO producto)
        {
            return(await new Wrapper <IProductoCompuestoDTO>().EjecutarTransaccionAsync(async() =>
            {
                Producto nuevoProducto = mapper.Map <Producto>(producto);
                contexto.Add(nuevoProducto);
                await contexto.SaveChangesAsync();

                InventarioProducto inventario = new InventarioProducto()
                {
                    IdProducto = nuevoProducto.IdProducto,
                    Cantidad = producto.Cantidad
                };
                contexto.Add(inventario);
                await contexto.SaveChangesAsync();
                producto.IdInventario = inventario.IdInventario;
                producto.IdProducto = nuevoProducto.IdProducto;

                return FabricaRespuesta <IProductoCompuestoDTO> .RespuestaCreacionExitosa(new List <IProductoCompuestoDTO> {
                    producto
                });
            }, async() => await FabricaRespuesta <IProductoCompuestoDTO> .RespuestaFallida(Mensajes.ErrorEnCreacion)));
        }
 public async Task <Respuesta <IProductoCompuestoDTO> > CrearProducto(IProductoCompuestoDTO producto)
 {
     return(await productoDAL.CrearProducto(producto));
 }