Exemplo n.º 1
0
        public async Task <IHttpActionResult> UpsertSeller(long productId, long id,
                                                           [FromBody] SellerForUpdateModel model)
        {
            if (model == null)
            {
                return(BadRequest(ExceptionMessageModelFactory.BadRequestBody()));
            }

            ValidateModel(new SellerForUpdateModelValidator(), model);
            if (!ModelState.IsValid)
            {
                return(BadRequest(ExceptionMessageModelFactory
                                  .BadRequestModelStateInvalid(ModelState.Values.SelectMany(x => x.Errors))));
            }

            if (!await _productRepository.DoesProductExist(productId))
            {
                return(NotFound(ExceptionMessageModelFactory.ParentToResourceNotFound()));
            }

            var sellerFromRepo = await _sellerRepository.GetSellerForProduct(productId, id);

            if (sellerFromRepo == null) // New Seller
            {
                if (await _sellerRepository.DoesSellerExist(id))
                {
                    return
                        (BadRequest(
                             ExceptionMessageModelFactory.BadRequestParentMismatch("Seller id exist under another product")));
                }

                var sellerToAdd = _mapper.Map <SellerEntity>(model);
                sellerToAdd.Id = id;
                await _sellerRepository.CreateSeller(productId, sellerToAdd);

                var modelResult = _mapper.Map <SellerForGetModel>(sellerToAdd);
                return(CreatedAtRoute("GetSellerForProduct", new { productId, id = modelResult.Id }, modelResult));
            }

            _mapper.Map(model, sellerFromRepo);
            await _sellerRepository.UpdateSeller(sellerFromRepo);

            return(NoContent());
        }