From 4761446bc012447acd73d1b459c370eeac0cffe6 Mon Sep 17 00:00:00 2001 From: Lloyd Wheeler Date: Tue, 19 Mar 2019 22:06:47 -0700 Subject: [PATCH 1/4] add migration to ensure all current 'freeform' users are using the pre-existing placeholder flag --- .../V226_flag_preexisting_freeform_users.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/db/migration/V226_flag_preexisting_freeform_users.java diff --git a/src/main/java/db/migration/V226_flag_preexisting_freeform_users.java b/src/main/java/db/migration/V226_flag_preexisting_freeform_users.java new file mode 100644 index 000000000..43b25a4fb --- /dev/null +++ b/src/main/java/db/migration/V226_flag_preexisting_freeform_users.java @@ -0,0 +1,15 @@ +package db.migration; + +import org.flywaydb.core.api.migration.jdbc.JdbcMigration; + +import java.sql.Connection; +import java.sql.PreparedStatement; + +public class V226_flag_preexisting_freeform_users implements JdbcMigration { + @Override + public void migrate(Connection connection) throws Exception { + PreparedStatement psUsers = connection.prepareStatement("UPDATE Users SET Placeholder = 1 WHERE LoginId LIKE 'change%';"); + psUsers.execute(); + psUsers.close(); + } +} From 9ff5eaa77df4ff256c664d3f9a0728aa4ed9ad40 Mon Sep 17 00:00:00 2001 From: Lloyd Wheeler Date: Wed, 20 Mar 2019 00:39:15 -0700 Subject: [PATCH 2/4] Update migration number --- ...rm_users.java => V226__flag_preexisting_freeform_users.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/db/migration/{V226_flag_preexisting_freeform_users.java => V226__flag_preexisting_freeform_users.java} (84%) diff --git a/src/main/java/db/migration/V226_flag_preexisting_freeform_users.java b/src/main/java/db/migration/V226__flag_preexisting_freeform_users.java similarity index 84% rename from src/main/java/db/migration/V226_flag_preexisting_freeform_users.java rename to src/main/java/db/migration/V226__flag_preexisting_freeform_users.java index 43b25a4fb..c038bf446 100644 --- a/src/main/java/db/migration/V226_flag_preexisting_freeform_users.java +++ b/src/main/java/db/migration/V226__flag_preexisting_freeform_users.java @@ -5,7 +5,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; -public class V226_flag_preexisting_freeform_users implements JdbcMigration { +public class V226__flag_preexisting_freeform_users implements JdbcMigration { @Override public void migrate(Connection connection) throws Exception { PreparedStatement psUsers = connection.prepareStatement("UPDATE Users SET Placeholder = 1 WHERE LoginId LIKE 'change%';"); From 69b4ba90d714dfcc48da9e6576f500729f0dbec1 Mon Sep 17 00:00:00 2001 From: Lloyd Wheeler Date: Wed, 3 Apr 2019 04:35:38 -0700 Subject: [PATCH 3/4] Adding placeholder user routes --- .../WorkgroupViewUserController.java | 33 ++++++++++- .../dss/ipa/services/InstructorService.java | 1 + .../ucdavis/dss/ipa/services/UserService.java | 6 +- .../dss/ipa/services/jpa/JpaUserService.java | 55 +++++++++++++++++++ 4 files changed, 93 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/ucdavis/dss/ipa/api/components/workgroup/WorkgroupViewUserController.java b/src/main/java/edu/ucdavis/dss/ipa/api/components/workgroup/WorkgroupViewUserController.java index 4b7d9ecc4..57a4d0673 100644 --- a/src/main/java/edu/ucdavis/dss/ipa/api/components/workgroup/WorkgroupViewUserController.java +++ b/src/main/java/edu/ucdavis/dss/ipa/api/components/workgroup/WorkgroupViewUserController.java @@ -3,6 +3,7 @@ import edu.ucdavis.dss.dw.dto.DwPerson; import edu.ucdavis.dss.ipa.api.helpers.CurrentUser; import edu.ucdavis.dss.ipa.api.helpers.Utilities; +import edu.ucdavis.dss.ipa.entities.Instructor; import edu.ucdavis.dss.ipa.entities.InstructorType; import edu.ucdavis.dss.ipa.entities.Role; import edu.ucdavis.dss.ipa.entities.User; @@ -10,6 +11,7 @@ import edu.ucdavis.dss.ipa.entities.Workgroup; import edu.ucdavis.dss.ipa.repositories.DataWarehouseRepository; import edu.ucdavis.dss.ipa.security.Authorizer; +import edu.ucdavis.dss.ipa.services.InstructorService; import edu.ucdavis.dss.ipa.services.InstructorTypeService; import edu.ucdavis.dss.ipa.services.RoleService; import edu.ucdavis.dss.ipa.services.UserRoleService; @@ -40,7 +42,6 @@ public class WorkgroupViewUserController { @Inject RoleService roleService; @Inject UserRoleService userRoleService; @Inject InstructorTypeService instructorTypeService; - @Inject CurrentUser currentUser; @Inject DataWarehouseRepository dwRepository; @Inject Authorizer authorizer; @@ -253,4 +254,34 @@ public UserRole updateUserRole(@PathVariable Long userRoleId, @PathVariable Long return userRoleService.save(userRole); } + + @RequestMapping(value = "/api/workgroups/{workgroupId}/users/placeholder", method = RequestMethod.POST) + @ResponseBody + public User createPlaceholderUser(@PathVariable Long workgroupId, @RequestBody User user, HttpServletResponse httpResponse) { + Workgroup workgroup = workgroupService.findOneById(workgroupId); + + if (workgroup == null) { + httpResponse.setStatus(HttpStatus.NOT_FOUND.value()); + return null; + } + + authorizer.hasWorkgroupRole(workgroup.getId(), "academicPlanner"); + + return userService.createPlaceholder(user); + } + + @RequestMapping(value = "/api/workgroups/{workgroupId}/users/placeholder/{previousLoginId}", method = RequestMethod.PUT) + @ResponseBody + public User updatePlaceholder(@PathVariable Long workgroupId, @PathVariable String previousLoginId, @RequestBody User user, HttpServletResponse httpResponse) { + Workgroup workgroup = workgroupService.findOneById(workgroupId); + + if (workgroup == null) { + httpResponse.setStatus(HttpStatus.NOT_FOUND.value()); + return null; + } + + authorizer.hasWorkgroupRole(workgroup.getId(), "academicPlanner"); + + return userService.updatePlaceholder(previousLoginId, user); + } } diff --git a/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java b/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java index d96ddac09..3c1abff70 100644 --- a/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java +++ b/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java @@ -4,6 +4,7 @@ import edu.ucdavis.dss.ipa.entities.InstructorCost; import edu.ucdavis.dss.ipa.entities.SectionGroup; import edu.ucdavis.dss.ipa.entities.SectionGroupCost; +import edu.ucdavis.dss.ipa.entities.User; import org.springframework.validation.annotation.Validated; import java.util.List; diff --git a/src/main/java/edu/ucdavis/dss/ipa/services/UserService.java b/src/main/java/edu/ucdavis/dss/ipa/services/UserService.java index 8619de3be..67e866d03 100644 --- a/src/main/java/edu/ucdavis/dss/ipa/services/UserService.java +++ b/src/main/java/edu/ucdavis/dss/ipa/services/UserService.java @@ -47,7 +47,7 @@ public interface UserService { void contact(@Valid User user, String messageBody, String subject); - void updateLastAccessed(User user); + void updateLastAccessed(User user); List findAllByWorkgroupAndRoleToken(Workgroup workgroup, String roleToken); @@ -56,4 +56,8 @@ public interface UserService { List findAllByTeachingAssignments(List teachingAssignments); List findAllByWorkgroup(Workgroup workgroup); + + User createPlaceholder(User user); + + User updatePlaceholder(String previousLoginId, User user); } diff --git a/src/main/java/edu/ucdavis/dss/ipa/services/jpa/JpaUserService.java b/src/main/java/edu/ucdavis/dss/ipa/services/jpa/JpaUserService.java index 17e16242e..1bcef46a7 100644 --- a/src/main/java/edu/ucdavis/dss/ipa/services/jpa/JpaUserService.java +++ b/src/main/java/edu/ucdavis/dss/ipa/services/jpa/JpaUserService.java @@ -2,12 +2,14 @@ import edu.ucdavis.dss.dw.dto.DwPerson; import edu.ucdavis.dss.ipa.api.helpers.Utilities; +import edu.ucdavis.dss.ipa.entities.Instructor; import edu.ucdavis.dss.ipa.entities.LineItem; import edu.ucdavis.dss.ipa.entities.TeachingAssignment; import edu.ucdavis.dss.ipa.entities.User; import edu.ucdavis.dss.ipa.entities.UserRole; import edu.ucdavis.dss.ipa.entities.Workgroup; import edu.ucdavis.dss.ipa.repositories.DataWarehouseRepository; +import edu.ucdavis.dss.ipa.repositories.InstructorRepository; import edu.ucdavis.dss.ipa.repositories.UserRepository; import edu.ucdavis.dss.ipa.services.UserService; import edu.ucdavis.dss.ipa.utilities.EmailService; @@ -27,6 +29,7 @@ public class JpaUserService implements UserService { @Inject UserRepository userRepository; @Inject DataWarehouseRepository dwRepository; @Inject EmailService emailService; + @Inject InstructorRepository instructorRepository; @Override public User save(User user) @@ -192,6 +195,58 @@ public List findAllByWorkgroup(Workgroup workgroup) { return users; } + /** + * Creates a user and instructor entity for the user + * @param user + * @return + */ + @Override + public User createPlaceholder(User user) { + String loginId = "changeme" + user.getLastName(); + User previouslyCreatedUser = userRepository.findByLoginId(loginId); + + // Should do nothing, placeholder is unnecessary as this user already exists + if (previouslyCreatedUser != null) { + return previouslyCreatedUser; + } + + user.setLoginId(loginId); + user.setPlaceholder(true); + user = this.save(user); + + // Make placeholder instructor + Instructor instructor = new Instructor(); + instructor.setEmail(user.getEmail()); + instructor.setFirstName(user.getFirstName()); + instructor.setLastName(user.getLastName()); + instructor.setLoginId(user.getLoginId()); + instructorRepository.save(instructor); + + return user; + } + + @Override + public User updatePlaceholder(String previousLoginId, User user) { + + User previouslyCreatedUser = userRepository.findByLoginId(previousLoginId); + previouslyCreatedUser.setLoginId(user.getLoginId()); + previouslyCreatedUser.setFirstName(user.getFirstName()); + previouslyCreatedUser.setLastName(user.getLastName()); + previouslyCreatedUser.setEmail(user.getEmail()); + previouslyCreatedUser.setDisplayName(user.getDisplayName()); + previouslyCreatedUser.setPlaceholder(false); + previouslyCreatedUser = this.save(previouslyCreatedUser); + + Instructor previouslyCreatedInstructor = instructorRepository.findByLoginIdIgnoreCase(previousLoginId); + previouslyCreatedInstructor.setLoginId(user.getLoginId()); + previouslyCreatedInstructor.setLastName(user.getLastName()); + previouslyCreatedInstructor.setFirstName(user.getFirstName()); + previouslyCreatedInstructor.setEmail(user.getEmail()); + instructorRepository.save(previouslyCreatedInstructor); + + return previouslyCreatedUser; + } + @Override public List findAllByTeachingAssignments(List teachingAssignments) { List users = new ArrayList<>(); From 7179720aea489a7a6d0e7a3281013d086aeb6a8b Mon Sep 17 00:00:00 2001 From: Lloyd Wheeler Date: Wed, 3 Apr 2019 11:27:15 -0700 Subject: [PATCH 4/4] Remove unneeded import --- .../java/edu/ucdavis/dss/ipa/services/InstructorService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java b/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java index 3c1abff70..d96ddac09 100644 --- a/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java +++ b/src/main/java/edu/ucdavis/dss/ipa/services/InstructorService.java @@ -4,7 +4,6 @@ import edu.ucdavis.dss.ipa.entities.InstructorCost; import edu.ucdavis.dss.ipa.entities.SectionGroup; import edu.ucdavis.dss.ipa.entities.SectionGroupCost; -import edu.ucdavis.dss.ipa.entities.User; import org.springframework.validation.annotation.Validated; import java.util.List;