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()); }
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()); }