public async Task <IActionResult> EditBeersQuantityOfWholesaler(int wholesalerId, int beerId, [FromBody] DTOs.UpdateStock updateBeer)
        {
            var wholesaler = await _repository.ReadAsync(wholesalerId);

            if (wholesaler == null)
            {
                return(NotFound());
            }

            var newBeer = updateBeer.Clone().SetBeerId(beerId);
            var beer    = await _beerRepository.ReadAsync(newBeer.BeerId);

            if (beer == null)
            {
                return(NotFound());
            }

            await BusinessRequirements.EnsureBeersAreSoldByWholesalerAsync(wholesalerId, new List <DTOs.Stock> {
                newBeer
            }, _repository);

            await BusinessRequirements.EnsureQuantitiesAreNotGreaterThanStockAsync(wholesalerId, new List <DTOs.Stock> {
                newBeer
            }, _repository);

            wholesaler.AddQuantity(-1 * newBeer.Quantity, beer);
            await _repository.SaveChangesAsync();

            return(NoContent());
        }
        public async Task <IActionResult> AddBeerToWholesaler(int wholesalerId, [FromBody] DTOs.Stock newBeer)
        {
            var wholesaler = await _repository.ReadAsync(wholesalerId);

            if (wholesaler == null)
            {
                return(NotFound());
            }

            var beer = await _beerRepository.ReadAsync(newBeer.BeerId);

            if (beer == null)
            {
                return(NotFound());
            }

            await BusinessRequirements.EnsureBeersAreNotSoldByWholesalerAsync(wholesalerId, new List <DTOs.Stock> {
                newBeer
            }, _repository);

            wholesaler.AddStock(newBeer.Quantity, beer);
            await _repository.SaveChangesAsync();

            return(NoContent());
        }
Example #3
0
        public void ThrowBusinessExceptionOrderEmpty()
        {
            var sut = _order.OrderDetails;

            Assert.That(() => BusinessRequirements.EnsureOrderDetailsIsNotEmpty(sut),
                        Throws.TypeOf <BusinessException>().With.Message.EqualTo("ORDER_CANNOT_BE_EMPTY")
                        );
        }
Example #4
0
        public void ThrowBusinessExceptionWholesalerDoesNotExist()
        {
            var breweryId   = 0;
            var breweryRepo = new BreweryRepository(_context, null);

            Assert.That(() => BusinessRequirements.EnsureBreweryExistsAsync(breweryId, breweryRepo),
                        Throws.TypeOf <BusinessException>().With.Message.EqualTo("BREWERY_MUST_EXIST")
                        );
        }
Example #5
0
        public void ThrowBusinessExceptionQuantityNotGreaterThanInStock()
        {
            var wholesalerId = 1;
            var sut          = _order.OrderDetails = new List <Stock>
            {
                new Stock {
                    BeerId = 1, Quantity = 159
                }
            };
            var wholesalerRepo = new WholesalerRepository(_context, null);

            Assert.That(() => BusinessRequirements.EnsureQuantitiesAreNotGreaterThanStockAsync(wholesalerId, sut, wholesalerRepo),
                        Throws.TypeOf <BusinessException>().With.Message.EqualTo("NOT_GREATER_NUMBER_THAN_IN_STOCK")
                        );
        }
Example #6
0
        public void ThrowBusinessExceptionBeerNotSoldByWholesaler()
        {
            var wholesalerId = 1;
            var sut          = _order.OrderDetails = new List <Stock>
            {
                new Stock {
                    BeerId = 6, Quantity = 1
                }
            };
            var wholesalerRepo = new WholesalerRepository(_context, null);

            Assert.That(() => BusinessRequirements.EnsureBeersAreSoldByWholesalerAsync(wholesalerId, sut, wholesalerRepo),
                        Throws.TypeOf <BusinessException>().With.Message.EqualTo("BEER_NOT_SOLD_BY_WHOLESALER")
                        );
        }
        public async Task <IActionResult> PlaceOrder(int wholesalerId, [FromBody] DTOs.Order order)
        {
            var wholesaler = await _repository.ReadAsync(wholesalerId);

            if (wholesaler == null)
            {
                return(NotFound());
            }

            await BusinessRequirements.EnsureAllRequirementsAsync(wholesalerId, order, _repository);

            var beers = await _beerRepository.ReadAllFromListAsync(order.OrderDetails.Select(od => od.BeerId));

            return(Ok(new DTOs.Quote(order, beers)));
        }
Example #8
0
        public void ThrowBusinessExceptionOrderHasDuplicate()
        {
            var sut = _order.OrderDetails;

            sut.Add(new Stock()
            {
                BeerId = 1
            });
            sut.Add(new Stock()
            {
                BeerId = 1
            });

            Assert.That(() => BusinessRequirements.EnsureOrderDetailsAreUnique(sut),
                        Throws.TypeOf <BusinessException>().With.Message.EqualTo("NO_DUPLICATE_IN_ORDER")
                        );
        }
Example #9
0
        public async Task <IActionResult> Post([FromBody] DTOs.CreateBeer beer, ApiVersion version = null)
        {
            if (version is null)
            {
                version = ApiVersion.Default;
            }

            await BusinessRequirements.EnsureBreweryExistsAsync(beer.BreweryId, _breweryRepository);

            DTOs.Beer newBeer = beer.Clone();
            var       entity  = await _repository.AddAsync(newBeer);

            await _repository.SaveChangesAsync();

            newBeer.Id = entity.Id;

            return(CreatedAtAction(nameof(GetById), new { id = newBeer.Id.ToString(), version = $"{version}" }, newBeer));
        }