示例#1
0
        public async Task <IActionResult> PartiallyUpdateSeller(long productId, long id,
                                                                [FromBody] JsonPatchDocument <SellerForUpdateModel> patchDoc)
        {
            if (patchDoc == null)
            {
                return(BadRequest(ExceptionMessageModelFactory.BadRequestBody()));
            }

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

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

            if (sellerFromRepo == null) // New Seller
            {
                var sellerForUpdate = new SellerForUpdateModel();
                patchDoc.ApplyTo(sellerForUpdate, ModelState);

                TryValidateModel(sellerForUpdate);
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ExceptionMessageModelFactory
                                      .BadRequestModelStateInvalid(new SerializableError(ModelState))));
                }

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

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

            var sellerToPatch = _mapper.Map <SellerForUpdateModel>(sellerFromRepo);

            patchDoc.ApplyTo(sellerToPatch, ModelState);

            TryValidateModel(sellerToPatch);
            if (!ModelState.IsValid)
            {
                return(BadRequest(ExceptionMessageModelFactory
                                  .BadRequestModelStateInvalid(new SerializableError(ModelState))));
            }

            var updatedSeller = _mapper.Map <SellerEntity>(sellerFromRepo);

            _mapper.Map(sellerToPatch, updatedSeller);
            await _sellerRepository.UpdateSeller(updatedSeller);

            return(NoContent());
        }
示例#2
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());
        }