Exemplo n.º 1
0
        private void CorrectFlow()
        {
            id = Builder <int> .CreateNew().Build();

            okResult    = Result.Ok(id);
            errorResult = Result.Error <int>("Error");

            command = Builder <AddOrUpdateProductCommand> .CreateNew().Build();

            mediator.Setup(m => m.Send(It.IsAny <AddOrUpdateProductCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(okResult);
        }
            public async Task <Result <int> > Handle(AddOrUpdateProductCommand request, CancellationToken cancellationToken)
            {
                if (request.Id == 0)
                {
                    var product = _mapper.Map <Product>(request);

                    var result = _validator.Validate(product);

                    if (!result.IsValid)
                    {
                        return(Result.Error <int>(result.Errors));
                    }

                    await _dataContext.Products.AddAsync(product, cancellationToken);

                    await _dataContext.SaveChangesAsync(cancellationToken);

                    return(Result.Ok(product.Id));
                }
                else
                {
                    var product = new Product
                    {
                        Id = request.Id
                    };

                    _dataContext.Products.Attach(product);

                    product.Name        = request.Name;
                    product.Description = request.Description;
                    product.CategoryId  = request.CategoryId;
                    product.Price       = request.Price;

                    var result = await _validator.ValidateAsync(product, cancellationToken);

                    if (!result.IsValid)
                    {
                        return(Result.Error <int>(result.Errors));
                    }

                    await _dataContext.SaveChangesAsync(cancellationToken);

                    return(Result.Ok(request.Id));
                }
            }
        public async Task <IActionResult> Put([FromBody] AddOrUpdateProductCommand command, CancellationToken cancellationToken = default)
        {
            var result = await _mediator.Send(command, cancellationToken);

            return(result.Process(ModelState));
        }