From 9b493439d857ecc1c39e0d72bd2983f2b959faf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Theodor=20Angerg=C3=A5rd?= Date: Sat, 8 Jun 2024 13:59:36 +0200 Subject: [PATCH] More migration --- .../it/chalmers/gamma/GammaApplication.java | 1 - .../web/ClientApprovingController.java | 56 +++++++++++++++++++ .../gamma/app/migration/ClientApproving.java | 36 ++++++++++++ .../gamma/app/migration/GammaMigration.java | 19 ++++--- .../templates/pages/client-approving.html | 23 ++++++++ 5 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/it/chalmers/gamma/adapter/primary/web/ClientApprovingController.java create mode 100644 app/src/main/java/it/chalmers/gamma/app/migration/ClientApproving.java create mode 100644 app/src/main/resources/templates/pages/client-approving.html diff --git a/app/src/main/java/it/chalmers/gamma/GammaApplication.java b/app/src/main/java/it/chalmers/gamma/GammaApplication.java index 244e83d9a..bc6233e4f 100644 --- a/app/src/main/java/it/chalmers/gamma/GammaApplication.java +++ b/app/src/main/java/it/chalmers/gamma/GammaApplication.java @@ -7,7 +7,6 @@ @SpringBootApplication @ConfigurationPropertiesScan -@EnableAsync public class GammaApplication { public static void main(String[] args) { diff --git a/app/src/main/java/it/chalmers/gamma/adapter/primary/web/ClientApprovingController.java b/app/src/main/java/it/chalmers/gamma/adapter/primary/web/ClientApprovingController.java new file mode 100644 index 000000000..3cc38fc9e --- /dev/null +++ b/app/src/main/java/it/chalmers/gamma/adapter/primary/web/ClientApprovingController.java @@ -0,0 +1,56 @@ +package it.chalmers.gamma.adapter.primary.web; + +import it.chalmers.gamma.app.client.domain.ClientUid; +import it.chalmers.gamma.app.migration.ClientApproving; +import it.chalmers.gamma.app.user.domain.UserId; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.servlet.ModelAndView; + +import java.util.Arrays; +import java.util.List; + +/** + * This is only used as a part of migration from old gamma to new gamma. + * We want to transfer the accepting of a client for certain project, + * such as HubbIT and BookIT. + */ +@Controller +public class ClientApprovingController { + + private final ClientApproving clientApproving; + + public ClientApprovingController(ClientApproving clientApproving) { + this.clientApproving = clientApproving; + } + + public record ClientApprovingForm(String clientUid, String userIds) { } + + @GetMapping("/client-approving") + public ModelAndView getClientApproving(@RequestHeader(value = "HX-Request", required = false) boolean htmxRequest) { + ModelAndView mv = new ModelAndView(); + if (htmxRequest) { + mv.setViewName("pages/client-approving"); + } else { + mv.setViewName("index"); + mv.addObject("page", "pages/client-approving"); + } + + mv.addObject("form", new ClientApprovingForm("", "")); + + return mv; + } + + @PostMapping("/client-approving") + public ModelAndView massApproveClient(ClientApprovingForm form) { + List userIds = Arrays.stream(form.userIds.split(",")).map(UserId::valueOf).toList(); + + clientApproving.approve(ClientUid.valueOf(form.clientUid), userIds); + + return new ModelAndView("redirect:/clients/" + form.clientUid); + } + +} diff --git a/app/src/main/java/it/chalmers/gamma/app/migration/ClientApproving.java b/app/src/main/java/it/chalmers/gamma/app/migration/ClientApproving.java new file mode 100644 index 000000000..e1848d661 --- /dev/null +++ b/app/src/main/java/it/chalmers/gamma/app/migration/ClientApproving.java @@ -0,0 +1,36 @@ +package it.chalmers.gamma.app.migration; + +import it.chalmers.gamma.app.authentication.AccessGuard; +import it.chalmers.gamma.app.client.domain.ClientRepository; +import it.chalmers.gamma.app.client.domain.ClientUid; +import it.chalmers.gamma.app.user.domain.UserId; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static it.chalmers.gamma.app.authentication.AccessGuard.isAdmin; + +@Service +public class ClientApproving { + + private final AccessGuard accessGuard; + private final ClientRepository clientRepository; + + public ClientApproving(AccessGuard accessGuard, ClientRepository clientRepository) { + this.accessGuard = accessGuard; + this.clientRepository = clientRepository; + } + + public void approve(ClientUid clientUid, List userIds) { + accessGuard.require(isAdmin()); + + for (UserId userId : userIds) { + try { + clientRepository.addClientApproval(userId, clientUid); + } catch(Exception e) { + //ignore... + } + } + } + +} diff --git a/app/src/main/java/it/chalmers/gamma/app/migration/GammaMigration.java b/app/src/main/java/it/chalmers/gamma/app/migration/GammaMigration.java index 18d6442ec..1d8d5068f 100644 --- a/app/src/main/java/it/chalmers/gamma/app/migration/GammaMigration.java +++ b/app/src/main/java/it/chalmers/gamma/app/migration/GammaMigration.java @@ -1,5 +1,6 @@ package it.chalmers.gamma.app.migration; +import it.chalmers.gamma.app.authentication.AccessGuard; import it.chalmers.gamma.app.common.Email; import it.chalmers.gamma.app.common.PrettyName; import it.chalmers.gamma.app.common.Text; @@ -13,9 +14,10 @@ import java.util.Optional; import java.util.UUID; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import static it.chalmers.gamma.app.authentication.AccessGuard.isAdmin; + @Service public class GammaMigration { @@ -24,18 +26,20 @@ public class GammaMigration { private final GroupRepository groupRepository; private final UserRepository userRepository; private final PostRepository postRepository; + private final AccessGuard accessGuard; public GammaMigration( - SuperGroupTypeRepository superGroupTypeRepository, - SuperGroupRepository superGroupRepository, - GroupRepository groupRepository, - UserRepository userRepository, - PostRepository postRepository) { + SuperGroupTypeRepository superGroupTypeRepository, + SuperGroupRepository superGroupRepository, + GroupRepository groupRepository, + UserRepository userRepository, + PostRepository postRepository, AccessGuard accessGuard) { this.superGroupTypeRepository = superGroupTypeRepository; this.superGroupRepository = superGroupRepository; this.groupRepository = groupRepository; this.userRepository = userRepository; this.postRepository = postRepository; + this.accessGuard = accessGuard; } public enum OldLanguage { @@ -108,8 +112,9 @@ public record OldData( List superGroups, List posts) {} - @Async public void migrate(String apiKey) { + accessGuard.require(isAdmin()); + var gammaData = getDataFromGamma(apiKey); // We got everything we need, let's delete E V E R Y T H I N G diff --git a/app/src/main/resources/templates/pages/client-approving.html b/app/src/main/resources/templates/pages/client-approving.html new file mode 100644 index 000000000..ac041b225 --- /dev/null +++ b/app/src/main/resources/templates/pages/client-approving.html @@ -0,0 +1,23 @@ +
+
+
+
+ Used to mass approve users to a client +
+

+ Use with care, just use this when you know that the user already has accepted the client before. +

+

+ Used for migration purposes. +

+
+
+
+
+ +
+
\ No newline at end of file