Beispiel #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 quantidade de estoque mínimo
            if (produto.QuantidadeEstoque < 10)
            {
                // fazer algo: avisar, enviar email, abrir chamado, realizar compra
                // para não corromper a responsabilidade deste metodo, que é para debitar o estoque
                // vamos criar o evento de dominio

                // quem vai receber esse evento é a classe ProdutoEventHandler
                await _bus.PublicarEvento(new ProdutoAbaixoEstoqueEvent(produto.Id, produto.QuantidadeEstoque));
            }

            _produtoRepository.Atualizar(produto);
            return(await _produtoRepository.UnitOfWork.Commit());
        }
Beispiel #2
0
        public async Task <bool> DebitarEstoque(Guid produtoId, int quantidade)
        {
            var produto = await _repository.ObterPorId(produtoId);

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

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

            produto.DebitarEstoque(quantidade);

            // TODO: Parametrizar a quantidade minima para lançamento do evento
            if (produto.QuantidadeEstoque < 10)
            {
                await _bus.PublicarEvento(new ProdutoAbaixoEstoqueEvent(produto.Id, produto.QuantidadeEstoque));
            }

            _repository.Atualizar(produto);
            return(await _repository.UnitOfWork.Commit());
        }