Esempio n. 1
0
        public async Task <bool> DebitarEstoque(Guid produtoId, int quantidade)
        {
            var produto = await _produtoRepository.ObterPorId(produtoId);

            if (produto == null)
            {
                return(false);
            }

            if (!produto.PossuiEstoque(quantidade))
            {
                return(false);
            }

            produto.DebitarEstoque(quantidade);

            // TODO: Parametrizar a quantidade
            if (produto.QuantidadeEstoque < 10)
            {
                await _mediator.PublicarDomainEvent
                (
                    new ProdutoAbaixoEstoqueEvent(produto.Id, produto.QuantidadeEstoque)
                );
            }

            _produtoRepository.Atualizar(produto);

            return(await _produtoRepository.UnitOfWork.Commit());
        }