Exercise Files
This commit is contained in:
@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using HPlusSports.Requests;
|
||||
|
||||
namespace HPlusSports.Services
|
||||
{
|
||||
public class ProductUpdateService
|
||||
{
|
||||
private readonly HPlusSportsDbContext _context;
|
||||
|
||||
public ProductUpdateService(HPlusSportsDbContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public UpdateProductResponse Update(UpdateProductRequest request)
|
||||
{
|
||||
var existing = _context.Products.Find(request.Id);
|
||||
|
||||
if (existing == null)
|
||||
{
|
||||
return new UpdateProductResponse
|
||||
{
|
||||
Success = false,
|
||||
Message = $"Couldn't update product #\"{request.Id}\": product not found!",
|
||||
};
|
||||
}
|
||||
|
||||
var hasPriceChanged = existing.Price != request.Price;
|
||||
|
||||
existing.CategoryId = request.CategoryId;
|
||||
existing.Description = request.Description;
|
||||
existing.MSRP = request.MSRP;
|
||||
existing.Name = request.Name;
|
||||
existing.Price = request.Price;
|
||||
existing.SKU = request.SKU;
|
||||
existing.Summary = request.Summary;
|
||||
existing.LastUpdated = DateTime.UtcNow;
|
||||
existing.LastUpdatedUserId = request.LastUpdatedUserId;
|
||||
|
||||
_context.SaveChanges();
|
||||
|
||||
if (hasPriceChanged)
|
||||
{
|
||||
var cartsToUpdate =
|
||||
_context.ShoppingCarts
|
||||
.Include("Items")
|
||||
.Where(cart => cart.Items.Any(x => x.SKU == request.SKU));
|
||||
|
||||
foreach (var cart in cartsToUpdate)
|
||||
{
|
||||
foreach (var cartItem in cart.Items.Where(x => x.SKU == request.SKU))
|
||||
{
|
||||
cartItem.Price = request.Price;
|
||||
}
|
||||
|
||||
cart.Recalculate();
|
||||
}
|
||||
}
|
||||
|
||||
_context.SaveChanges();
|
||||
|
||||
return new UpdateProductResponse
|
||||
{
|
||||
Success = true,
|
||||
Message = $"Successfully updated \"{request.Name}\"",
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user