public IActionResult PartiallyUpdateEducationForUser(Guid userId, Guid educationId, JsonPatchDocument <EducationToUpdateDto> educationDocument) { if (!userRepo.UserExists(userId)) { return(NotFound()); } var educationForUser = repo.GetEducation(userId, educationId); if (educationForUser == null) { var educationDto = new EducationToUpdateDto(); educationDocument.ApplyTo(educationDto, ModelState); if (!TryValidateModel(educationDto)) // code to add validation to patch plus ModelState in applyTo { return(ValidationProblem(ModelState)); } var educationToAdd = mapper.Map <Education>(educationDto); educationToAdd.EducationId = educationId; repo.AddEducation(userId, educationToAdd); repo.Save(); var educationToReturn = mapper.Map <EducationDto>(educationToAdd); return(CreatedAtRoute("GetEducationForUser", new { userId, educationId = educationToReturn.EducationId }, educationToReturn )); } var educationToPatch = mapper.Map <EducationToUpdateDto>(educationForUser); educationDocument.ApplyTo(educationToPatch, ModelState); if (!TryValidateModel(educationToPatch)) { return(ValidationProblem(ModelState)); } mapper.Map(educationToPatch, educationForUser); repo.UpdateEducation(educationForUser); repo.Save(); return(NoContent()); }
public ActionResult UpdateEducationForUser(Guid educationId, EducationToUpdateDto education) { var handler = new JwtSecurityTokenHandler(); var header = Request.Headers["Authorization"]; var credValue = header.ToString().Substring("Bearer ".Length).Trim(); var jsonToken = handler.ReadToken(credValue); var tokenS = handler.ReadToken(credValue) as JwtSecurityToken; var id = tokenS.Claims.First(claim => claim.Type == "unique_name").Value; var guidId = Guid.Parse(id); var userFromToken = repo.GetUser(guidId); if (!userRepo.UserExists(userFromToken.Id)) { return(NotFound()); } var educationForUser = repo.GetEducation(userFromToken.Id, educationId); if (educationForUser == null) { // add the education if it doesn't exists var educationToAdd = mapper.Map <Education>(education); educationToAdd.EducationId = educationId; repo.AddEducation(userFromToken.Id, educationToAdd); repo.Save(); var educationToReturn = mapper.Map <EducationDto>(educationToAdd); return(CreatedAtRoute("GetEducationForUser", new { userFromToken.Id, educationId = educationToReturn.EducationId }, educationToReturn)); } // map the entity to educationForUpdateDto // apply the updated field values //map the educationForUpdateDto back to the entity mapper.Map(education, educationForUser); repo.UpdateEducation(educationForUser); repo.Save(); return(NoContent()); }