public ActionResult PatchSite(Guid terminalId, Guid dispenserId, Guid fuelTypeId, Guid tankId, [FromBody] JsonPatchDocument <TankForUpdateDto> patchDocument) { TankResourceParameters tankResourceParameters = new TankResourceParameters(); if (terminalId == Guid.Empty || dispenserId == Guid.Empty || fuelTypeId == Guid.Empty || tankId == Guid.Empty) { return(BadRequest()); } if (patchDocument == null) { return(BadRequest()); } if (!_tankRepository.TankExists(tankId)) { return(NotFound()); } tankResourceParameters.TermimalId = terminalId; tankResourceParameters.DispenserId = dispenserId; tankResourceParameters.FuelTypeId = fuelTypeId; var siteFromRepo = _tankRepository.GetTank(tankResourceParameters, tankId); if (siteFromRepo == null) { var tankDto = new TankForUpdateDto(); patchDocument.ApplyTo(tankDto, ModelState); if (!TryValidateModel(tankDto)) { return(ValidationProblem(ModelState)); } var tankToAdd = _mapper.Map <Entities.Tank>(tankDto); tankToAdd.TerminalId = terminalId; tankToAdd.DispenserId = dispenserId; tankToAdd.FuelTypeId = fuelTypeId; _tankRepository.AddTank(tankToAdd, tankId); _tankRepository.Save(); var siteToReturn = _mapper.Map <SiteDto>(siteToAdd); return(CreatedAtRoute("GetSite", new { siteId }, siteToReturn)); } var siteToPatch = _mapper.Map <SiteForUpdateDto>(siteFromRepo); patchDocument.ApplyTo(siteToPatch); if (!TryValidateModel(siteToPatch)) { return(ValidationProblem(ModelState)); } _mapper.Map(siteToPatch, siteFromRepo); _siteRepository.UpdateSite(siteFromRepo); _siteRepository.Save(); return(NoContent()); }