//operations: //Add:{"op","add","path":"/biscuits/1", "value":{"name":"Ginger nut"}} //Remove:{"op":"remove","path":"/biscuits"} //Move:{"op":"move","from":"/biscuits","path":"/cookies"} //Replace:{"op":"replace","path":"/biscuits/0/name","value":"Chocolate digestive"} //Copy:{"op":"copy","from":"/biscuits/0","path":"/best_biscuit"} //Test:{"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"} #endregion public async Task <IActionResult> PartiallyUpdateEmployeeForCompany( Guid companyId, Guid employeeId, JsonPatchDocument <EmployeeUpdatedDto> patchDocument) { if (!await _companyRepository.CompanyExistsAsync(companyId)) { return(NotFound()); } var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId); if (employeeEntity == null) { var employeeDto = new EmployeeUpdatedDto(); patchDocument.ApplyTo(employeeDto, ModelState); if (!TryValidateModel(employeeDto)) { return(ValidationProblem(ModelState)); } var employeeToAdd = _mapper.Map <Employee>(employeeDto); employeeToAdd.Id = employeeId; _companyRepository.AddEmployee(companyId, employeeToAdd); await _companyRepository.SaveAsync(); var dtoToReturn = _mapper.Map <EmployeeDto>(employeeToAdd); return(CreatedAtAction(nameof(GetEmployeeForCompany), new { companyId, employeeId = dtoToReturn.Id }, dtoToReturn)); } var dtoToPatch = _mapper.Map <EmployeeUpdatedDto>(employeeEntity); // 需要处理验证错误 patchDocument.ApplyTo(dtoToPatch, ModelState); if (!TryValidateModel(dtoToPatch)) { return(ValidationProblem(ModelState)); } _mapper.Map(dtoToPatch, employeeEntity); _companyRepository.UpdateEmployee(employeeEntity); await _companyRepository.SaveAsync(); return(Ok(dtoToPatch)); }
[HttpPut("{employeeId}")] //put整体替换,patch局部更新 //如果employeeId存在,做更新操作;不存在,则添加新的employee记录 public async Task <ActionResult <EmployeeDto> > UpdateEmployeeForCompany(Guid companyId, Guid employeeId, EmployeeUpdatedDto employee) { if (!await _companyRepository.CompanyExistsAsync(companyId)) { return(NotFound()); } var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId); if (employeeEntity == null) { var employeeToAddEntity = _mapper.Map <Employee>(employee); employeeToAddEntity.Id = employeeId; _companyRepository.AddEmployee(companyId, employeeToAddEntity); await _companyRepository.SaveAsync(); var dtoReturn = _mapper.Map <EmployeeDto>(employeeToAddEntity); return(CreatedAtAction(nameof(GetEmployeeForCompany), new { companyId = companyId, employeeId = dtoReturn.Id }, dtoReturn)); } //entity转换为updateDto //把传进来的employee的值更新到updateDto //把updateDto映射回entity _mapper.Map(employee, employeeEntity); _companyRepository.UpdateEmployee(employeeEntity); await _companyRepository.SaveAsync(); return(Ok(employeeEntity)); //or return NoContent() -status code:204 }