コード例 #1
0
        public void Execute(BuyBeersRequest request, IBuyBeersPresenter presenter)
        {
            var ids = request.Beers.Keys;

            var catalogBeersStock = _catalog
                                    .GetAllBeers()
                                    .Where(x => ids.Contains(x.Id.Value))
                                    .Select(x => new { BeerId = x.Id.Value, BeerStock = x.Stock.Value });

            var response = new BuyBeersResponse
            {
                Data   = new Dictionary <Guid, bool>(),
                Errors = new Dictionary <Guid, string>()
            };


            request.Beers.ToList().ForEach(x =>
            {
                var(key, value) = x;
                var founded     = catalogBeersStock.Any(cbs => cbs.BeerId.Equals(key));
                var available   = founded && catalogBeersStock.Any(cbs => cbs.BeerStock >= value);

                if (!founded)
                {
                    response.Errors.Add(key, "Unknown Beer.");
                    response.Data.Add(key, false);
                }
                else if (!available)
                {
                    response.Errors.Add(key, "Not enough stock.");
                    response.Data.Add(key, false);
                }
                else
                {
                    response.Data.Add(key, true);
                }
            });

            if (response.Errors.Any())
            {
                response.Data = null;
            }
            else
            {
                request.Beers.ToList().ForEach(x =>
                {
                    var(key, value) = x;

                    var beer = _catalog.GetOneBeer(key);

                    beer.DecreaseStock(value);

                    _catalog.UpdateBeer(beer);
                });
            }

            presenter.Present(response);
        }
コード例 #2
0
 public void Present(BuyBeersResponse response)
 {
     ViewModel = new ApiBuyBeersViewModel
     {
         HttpCode = response.Data.Values.Any(x => !x) ? 400 : 200,
         Success  = response.Data.Values.All(x => x),
         Data     = response.Data,
         Errors   = response.Errors
     };
 }