package fr.la_banquise.backend.rest; 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; 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; /** * UserEndpoints */ @Path("/api/users") @Produces(MediaType.APPLICATION_JSON) public class UserEndpoints { @Inject SecurityIdentity identity; @Inject UserService userService; @GET @Path("/me") @Authenticated public Response getCurrentUser() { LoggedUserResponse user = new LoggedUserResponse( identity.getPrincipal().getName(), identity.getRoles()); return Response.ok(user).build(); } @GET @RolesAllowed("root") public Response getAllUsers() { return Response.ok(userService.getAllUsers()).build(); } @GET @RolesAllowed("root") @Path("{id}") public Response getUser(@PathParam("id") Long id) { return Response.ok(userService.getUser(id)).build(); } @POST @RolesAllowed("root") public Response createUser(UserRequest user) { return Response.ok(userService.createUser(user)).build(); } @POST @RolesAllowed("root") // TODO: respos JI doivent aussi pouvoir faire ca @Path("/bulk") // 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(BulkUserDelRequest users) { userService.deleteUsers( users); // TODO: adapter en focntion de la reponse return Response.ok().build(); } @DELETE @RolesAllowed("root") public Response deleteUser(@QueryParam("id") Long id) { userService.deleteUser(id); return Response.ok().build(); } }