public async Task <ValidationResult> Handle(VendaProdutoCommand request, CancellationToken cancellationToken)
        {
            if (!request.IsValid())
            {
                return(request.ValidationResult);
            }

            var produto = await _produtorepository.GetById(request.Id);

            if (produto is null)
            {
                AddError("O produto não existe.");
                return(ValidationResult);
            }
            if (produto.Quantidade < request.Quantidade)
            {
                AddError("Quantidade maior do que a quantidade em estoque.");
                return(ValidationResult);
            }
            produto.Quantidade -= request.Quantidade;

            _produtorepository.Vendido(produto);

            var validation = await Commit(_produtorepository.UnitOfWork);

            if (validation.IsValid)
            {
                produto.AddDomainEvent(new ProdutoVendaEvent(produto.Id, produto.Quantidade));
            }

            return(validation);
        }
Exemplo n.º 2
0
        public async Task <ValidationResult> Handle(VendaProdutoCommand request, CancellationToken cancellationToken)
        {
            if (!request.IsValid())
            {
                return(request.ValidationResult);
            }
            var produto = await _produtorepository.GetById(request.Id);

            produto.Quantidade -= request.Quantidade;

            _produtorepository.Vendido(produto);

            return(await Commit(_produtorepository.UnitOfWork));
        }
Exemplo n.º 3
0
        public async Task <ValidationResult> Venda(Guid id, decimal quantidade)
        {
            var vendaCommand = new VendaProdutoCommand(id, quantidade);

            return(await _mediator.SendCommand(vendaCommand));
        }