package fr.la_banquise.backend.rest; import fr.la_banquise.backend.data.model.RolesAsso; import fr.la_banquise.backend.data.model.User; 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.BulkUserDelResponse; import fr.la_banquise.backend.rest.response.BulkUserPostResponse; import fr.la_banquise.backend.rest.response.LoggedUserResponse; import fr.la_banquise.backend.services.UserService; import io.quarkus.security.Authenticated; import io.quarkus.security.identity.SecurityIdentity; import jakarta.annotation.security.RolesAllowed; import jakarta.inject.Inject; import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import java.util.HashMap; import java.util.Map; /** * UserEndpoints */ @Path("/api/users") @Produces(MediaType.APPLICATION_JSON) public class UsersEndpoints { @Inject SecurityIdentity identity; @Inject UserService userService; @GET @RolesAllowed("ROOT") public Response getAllUsers() { return Response.ok(userService.getAllUsers()).build(); } @POST @RolesAllowed("ROOT") // TODO: respos JI doivent aussi pouvoir faire ca // INFO: if response is empty => required associated jiId was not found in // existing JIs public Response createUsersBulk(BulkUserPostRequest request) { BulkUserPostResponse response = userService.createUsers(request); if (response.successNames.size() == request.users.size()) return Response.ok().build(); if (response.successNames.size() == 0) return Response.status(500).build(); return Response.status(202) .entity(Map.of("These users were already created : ", response.alreadyCreated)) .build(); } @DELETE @RolesAllowed("ROOT") public Response deleteUserBulk(BulkUserDelRequest users) { BulkUserDelResponse response = userService.deleteUsers(users); if (response.successNames.size() == users.usernames.size()) return Response.ok().build(); Map retour = new HashMap(); for (int id = 0; id < response.failedNames.size(); id++) { retour.put(response.failedNames.get(id), response.failedReasons.get(id)); } return Response.status(202).entity(retour).build(); } }