From b831d9b66e45af2ab07095d3d69fa465343d6652 Mon Sep 17 00:00:00 2001 From: Arthur Wambst Date: Fri, 22 Aug 2025 11:57:41 +0200 Subject: [PATCH] bulk user handling basics --- .../backend/rest/UserEndpoints.java | 15 +++-- .../rest/request/BulkUserDelRequest.java | 7 +++ ...rRequest.java => BulkUserPostRequest.java} | 8 +-- .../backend/rest/request/UserDelRequest.java | 5 ++ .../backend/rest/request/UserRequest.java | 7 --- .../rest/response/BulkUserDelResponse.java | 12 ++++ .../rest/response/BulkUserPostResponse.java | 11 ++++ .../backend/services/UserService.java | 58 +++++++++++++------ 8 files changed, 86 insertions(+), 37 deletions(-) create mode 100644 src/main/java/fr/la_banquise/backend/rest/request/BulkUserDelRequest.java rename src/main/java/fr/la_banquise/backend/rest/request/{BulkUserRequest.java => BulkUserPostRequest.java} (50%) create mode 100644 src/main/java/fr/la_banquise/backend/rest/request/UserDelRequest.java create mode 100644 src/main/java/fr/la_banquise/backend/rest/response/BulkUserDelResponse.java create mode 100644 src/main/java/fr/la_banquise/backend/rest/response/BulkUserPostResponse.java diff --git a/src/main/java/fr/la_banquise/backend/rest/UserEndpoints.java b/src/main/java/fr/la_banquise/backend/rest/UserEndpoints.java index 39a7050..2ca6405 100644 --- a/src/main/java/fr/la_banquise/backend/rest/UserEndpoints.java +++ b/src/main/java/fr/la_banquise/backend/rest/UserEndpoints.java @@ -1,6 +1,7 @@ package fr.la_banquise.backend.rest; -import fr.la_banquise.backend.rest.request.BulkUserRequest; +import fr.la_banquise.backend.rest.request.BulkUserDelRequest; +import fr.la_banquise.backend.rest.request.BulkUserPostRequest; import fr.la_banquise.backend.rest.request.UserRequest; import fr.la_banquise.backend.rest.response.LoggedUserResponse; import fr.la_banquise.backend.services.UserService; @@ -60,16 +61,20 @@ public class UserEndpoints { @POST @RolesAllowed("root") // TODO: respos JI doivent aussi pouvoir faire ca @Path("/bulk") - public Response createUsersBulk(BulkUserRequest users) { - userService.createUsers(users); + // INFO: if response is empty => required associated jiId was not found in + // existing JIs + public Response createUsersBulk(BulkUserPostRequest users) { + userService.createUsers( + users); // TODO: adapter en fonction de la reponse return Response.ok().build(); } @DELETE @RolesAllowed("root") @Path("/bulk") - public Response deleteUserBulk() { - userService.deleteUsers(); + public Response deleteUserBulk(BulkUserDelRequest users) { + userService.deleteUsers( + users); // TODO: adapter en focntion de la reponse return Response.ok().build(); } diff --git a/src/main/java/fr/la_banquise/backend/rest/request/BulkUserDelRequest.java b/src/main/java/fr/la_banquise/backend/rest/request/BulkUserDelRequest.java new file mode 100644 index 0000000..e247b79 --- /dev/null +++ b/src/main/java/fr/la_banquise/backend/rest/request/BulkUserDelRequest.java @@ -0,0 +1,7 @@ +package fr.la_banquise.backend.rest.request; + +import java.util.List; + +public class BulkUserDelRequest { + public List usernames; +} diff --git a/src/main/java/fr/la_banquise/backend/rest/request/BulkUserRequest.java b/src/main/java/fr/la_banquise/backend/rest/request/BulkUserPostRequest.java similarity index 50% rename from src/main/java/fr/la_banquise/backend/rest/request/BulkUserRequest.java rename to src/main/java/fr/la_banquise/backend/rest/request/BulkUserPostRequest.java index cef006b..b179b27 100644 --- a/src/main/java/fr/la_banquise/backend/rest/request/BulkUserRequest.java +++ b/src/main/java/fr/la_banquise/backend/rest/request/BulkUserPostRequest.java @@ -2,11 +2,7 @@ package fr.la_banquise.backend.rest.request; import java.util.List; -/** - * UserRequest - */ -public class BulkUserRequest { +public class BulkUserPostRequest { public List users; - public String password; - public Long tpId; + public Long jiId; } diff --git a/src/main/java/fr/la_banquise/backend/rest/request/UserDelRequest.java b/src/main/java/fr/la_banquise/backend/rest/request/UserDelRequest.java new file mode 100644 index 0000000..e1223b3 --- /dev/null +++ b/src/main/java/fr/la_banquise/backend/rest/request/UserDelRequest.java @@ -0,0 +1,5 @@ +package fr.la_banquise.backend.rest.request; + +public class UserDelRequest { + public String name; +} diff --git a/src/main/java/fr/la_banquise/backend/rest/request/UserRequest.java b/src/main/java/fr/la_banquise/backend/rest/request/UserRequest.java index f73a23e..9c2e690 100644 --- a/src/main/java/fr/la_banquise/backend/rest/request/UserRequest.java +++ b/src/main/java/fr/la_banquise/backend/rest/request/UserRequest.java @@ -1,14 +1,7 @@ package fr.la_banquise.backend.rest.request; -/** - * UserRequest - */ public class UserRequest { public String name; public String email; public String password; - public String instance_name; - public String instance_ssh; - public Long instance_port; - public String instance_pwd; } diff --git a/src/main/java/fr/la_banquise/backend/rest/response/BulkUserDelResponse.java b/src/main/java/fr/la_banquise/backend/rest/response/BulkUserDelResponse.java new file mode 100644 index 0000000..97491f6 --- /dev/null +++ b/src/main/java/fr/la_banquise/backend/rest/response/BulkUserDelResponse.java @@ -0,0 +1,12 @@ +package fr.la_banquise.backend.rest.response; + +import java.util.List; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +public class BulkUserDelResponse { + public List success_names; + public List failed_names; + public List failed_reasons; +} diff --git a/src/main/java/fr/la_banquise/backend/rest/response/BulkUserPostResponse.java b/src/main/java/fr/la_banquise/backend/rest/response/BulkUserPostResponse.java new file mode 100644 index 0000000..2dda8ec --- /dev/null +++ b/src/main/java/fr/la_banquise/backend/rest/response/BulkUserPostResponse.java @@ -0,0 +1,11 @@ +package fr.la_banquise.backend.rest.response; + +import java.util.List; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +public class BulkUserPostResponse { + public List success_names; + public List already_created; +} diff --git a/src/main/java/fr/la_banquise/backend/services/UserService.java b/src/main/java/fr/la_banquise/backend/services/UserService.java index 866c5cb..f1aec56 100644 --- a/src/main/java/fr/la_banquise/backend/services/UserService.java +++ b/src/main/java/fr/la_banquise/backend/services/UserService.java @@ -1,17 +1,20 @@ package fr.la_banquise.backend.services; -import fr.la_banquise.backend.data.model.Instance; import fr.la_banquise.backend.data.model.User; +import fr.la_banquise.backend.data.repository.JiRepository; import fr.la_banquise.backend.data.repository.UserRepository; -import fr.la_banquise.backend.rest.request.BulkUserRequest; +import fr.la_banquise.backend.rest.request.BulkUserDelRequest; +import fr.la_banquise.backend.rest.request.BulkUserPostRequest; +import fr.la_banquise.backend.rest.request.UserDelRequest; import fr.la_banquise.backend.rest.request.UserRequest; +import fr.la_banquise.backend.rest.response.BulkUserDelResponse; +import fr.la_banquise.backend.rest.response.BulkUserPostResponse; import io.quarkus.elytron.security.common.BcryptUtil; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.transaction.Transactional; import java.util.ArrayList; import java.util.List; -import org.hibernate.annotations.TypeRegistration; /** * UserService @@ -20,8 +23,8 @@ import org.hibernate.annotations.TypeRegistration; public class UserService { @Inject UserRepository userRepository; - @Inject InstanceService instanceService; + @Inject JiRepository jiRepository; public List getAllUsers() { return userRepository.listAll(); } @@ -54,24 +57,41 @@ public class UserService { } } - /*@Transactional - public void deleteJDMI() { - for (Instance instance : instanceService.getAllInstances()) { - instanceService.deleteInstance(instance.id); - userRepository.deleteById(instance.owner.id); + @Transactional + public BulkUserDelResponse deleteUsers(BulkUserDelRequest request) { + BulkUserDelResponse response = new BulkUserDelResponse(); + User userToDel; + + for (UserDelRequest requestName : request.usernames) { + try { + userToDel = + userRepository.find("name", requestName.name).firstResult(); + userRepository.delete(userToDel); + response.success_names.add(requestName.name); + } catch (Exception e) { + response.failed_names.add(requestName.name); + response.failed_reasons.add(e.toString()); + } } + + return response; } @Transactional - public List createJdmiUser(BulkUserRequest usersRequest) { - List users = new ArrayList<>(); - for (UserRequest user : usersRequest.users) { - User newUser = createUser(user); - users.add(newUser); - instanceService.createInstance( - user.instance_name, user.instance_ssh, user.instance_pwd, - user.instance_port, user.name, usersRequest.tpId); + public BulkUserPostResponse createUsers(BulkUserPostRequest usersRequest) { + BulkUserPostResponse response = new BulkUserPostResponse(); + + if (jiRepository.findById(usersRequest.jiId) != null) { + for (UserRequest user : usersRequest.users) { + try { + createUser(user); + response.success_names.add(user.name); + } catch (Exception e) { + response.already_created.add(user.name); + } + } } - return new ArrayList(); - }*/ + + return response; + } }