From fb80b381f6a3cb184468599418778ee53b877c9a Mon Sep 17 00:00:00 2001 From: Arthur Wambst Date: Fri, 22 Aug 2025 07:25:13 +0200 Subject: [PATCH] feat: add and removal of respo on subjects --- .../backend/rest/SujetEndpoints.java | 44 +++++++++++++++++++ .../backend/services/SujetService.java | 25 +++++++++-- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/la_banquise/backend/rest/SujetEndpoints.java b/src/main/java/fr/la_banquise/backend/rest/SujetEndpoints.java index 910d310..7909288 100644 --- a/src/main/java/fr/la_banquise/backend/rest/SujetEndpoints.java +++ b/src/main/java/fr/la_banquise/backend/rest/SujetEndpoints.java @@ -7,12 +7,15 @@ import io.quarkus.security.identity.SecurityIdentity; import jakarta.annotation.security.RolesAllowed; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; 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.Map; /** * TpEndpoints @@ -25,6 +28,7 @@ public class SujetEndpoints { @Inject SujetService sujetService; @GET + @Path("/all") @Produces(MediaType.APPLICATION_JSON) @Authenticated public Response getAllSujetsRespo() { @@ -44,4 +48,44 @@ public class SujetEndpoints { public Response createSujet(SujetRequest sujet) { return Response.ok(sujetService.createSujet(sujet)).build(); } + + @POST + @Path("/respo") + @Produces(MediaType.APPLICATION_JSON) + @RolesAllowed("root") + public Response addRespoSujet(@QueryParam("name_sujet") String name_sujet, + @QueryParam("name_user") String name_user) { + try { + if (sujetService.addRespo(name_sujet, name_user)) { + return Response.ok("Respo added sucessfully.").build(); + } + return Response.status(404) + .entity("Already respo of this subject") + .build(); + } catch (Exception e) { + return Response.status(500) + .entity(Map.of("error", e.getMessage())) + .build(); + } + } + + @DELETE + @Path("/respo") + @Produces(MediaType.APPLICATION_JSON) + @RolesAllowed("root") + public Response rmRespoSujet(@QueryParam("name_sujet") String name_sujet, + @QueryParam("name_user") String name_user) { + try { + if (sujetService.rmRespo(name_sujet, name_user)) { + return Response.ok("Respo removed sucessfully.").build(); + } + return Response.status(404) + .entity("No corresponding respo not found (already removed ?)") + .build(); + } catch (Exception e) { + return Response.status(500) + .entity(Map.of("error", e.getMessage())) + .build(); + } + } } diff --git a/src/main/java/fr/la_banquise/backend/services/SujetService.java b/src/main/java/fr/la_banquise/backend/services/SujetService.java index f5f5ffb..40324a0 100644 --- a/src/main/java/fr/la_banquise/backend/services/SujetService.java +++ b/src/main/java/fr/la_banquise/backend/services/SujetService.java @@ -1,20 +1,16 @@ package fr.la_banquise.backend.services; -import fr.la_banquise.backend.data.model.Instance; import fr.la_banquise.backend.data.model.Sujet; import fr.la_banquise.backend.data.model.User; import fr.la_banquise.backend.data.repository.InstanceRepository; import fr.la_banquise.backend.data.repository.SujetRepository; import fr.la_banquise.backend.data.repository.UserRepository; import fr.la_banquise.backend.rest.request.SujetRequest; -import fr.la_banquise.backend.rest.response.PracticalResponse; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.transaction.Transactional; import jakarta.ws.rs.core.SecurityContext; -import java.text.Collator; import java.util.List; -import java.util.stream.Collectors; /** * TpService @@ -71,6 +67,27 @@ public class SujetService { sujetRepository.deleteById(id); } + @Transactional + public boolean addRespo(String name_sujet, String name_user) { + User user = userRepository.find("name", name_user).firstResult(); + Sujet sujet = sujetRepository.find("name", name_sujet).firstResult(); + if (!sujet.respos.contains(user)) { + sujet.respos.add(user); + return true; + } + return false; + } + + @Transactional + public boolean rmRespo(String name_sujet, String name_user) { + User user = userRepository.find("name", name_user).firstResult(); + Sujet sujet = sujetRepository.find("name", name_sujet).firstResult(); + if (sujet.respos.contains(user)) { + sujet.respos.remove(user); + return true; + } + return false; + } /* * TODO: Seuls les respos du sujet et root doivent pouvoir avoir acces * @Transactional