示例#1
0
        public async Task <IActionResult> PutProduct([FromRoute] int id, [FromBody] Product product)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != product.Id)
            {
                return(BadRequest());
            }

            _context.Entry(product).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ProductExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <CatalogProductDto> Handle(CreateProductCommand request, CancellationToken cancellationToken)
        {
            var product = Product.Of(Guid.NewGuid(), request.Name, request !.Description, request.Price,
                                     request.ImageUrl, request.InventoryId, request.CategoryId);

            var cats = await _dbContext.Categories.ToListAsync(cancellationToken : cancellationToken);

            var category = await _dbContext.Categories
                           .FirstOrDefaultAsync(x => x.Id == request.CategoryId, cancellationToken : cancellationToken);

            if (category == null)
            {
                throw new NullReferenceException($"Couldn't find out any Category # {request.CategoryId}");
            }
            product.AssignCategory(category);

            var entityCreated = await _dbContext.Products.AddAsync(product, cancellationToken);

            await _dbContext.SaveChangesAsync(cancellationToken);

            var productCreated = entityCreated.Entity;

            return(new CatalogProductDto
            {
                Id = productCreated.Id,
                Name = productCreated.Name,
                Description = productCreated.Description,
                ImageUrl = productCreated.ImageUrl,
                Price = productCreated.Price
            });
        }
        public async Task <CatalogProductDto> Handle(
            UpdateProductCommand request,
            CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var product = await _dbContext.Products.FirstOrDefaultAsync(x => x.Id == request.Id);

            if (product == null)
            {
                throw new Exception($"Couldn't find product # {request.Id}");
            }

            product.UpdateProduct(
                request.Name,
                request.Description,
                request.Price,
                request.ImageUrl,
                request.StoreId,
                request.Rop,
                request.Eoq);

            var cats = await _dbContext.Categories.ToListAsync(cancellationToken : cancellationToken);

            var category = await _dbContext.Categories
                           .FirstOrDefaultAsync(x => x.Id == request.CategoryId, cancellationToken : cancellationToken);

            if (category == null)
            {
                throw new NullReferenceException($"Couldn't find out any Category # {request.CategoryId}");
            }

            product.AssignCategory(category);

            var entityUpdated = _dbContext.Products.Update(product);
            await _dbContext.SaveChangesAsync(cancellationToken);

            var productUpdated = entityUpdated.Entity;

            return(new CatalogProductDto
            {
                Id = productUpdated.Id,
                Name = productUpdated.Name,
                Description = productUpdated.Description,
                ImageUrl = productUpdated.ImageUrl,
                Price = productUpdated.Price
            });
        }
        public async Task <bool> Handle(DeleteProductCommand request, CancellationToken cancellationToken)
        {
            var product = await _dbContext.Products.FirstOrDefaultAsync(x => x.Id == request.Id);

            if (product == null)
            {
                throw new Exception($"Couldn't find product #{request.Id}");
            }

            product.MarkAsDeleted();

            var effected = await _dbContext.SaveChangesAsync(cancellationToken);

            return(effected > 0);
        }