feat: add and removal of respo on subjects

This commit is contained in:
Arthur Wambst 2025-08-22 07:25:13 +02:00
parent f135ef17ab
commit fb80b381f6
No known key found for this signature in database
2 changed files with 65 additions and 4 deletions

View File

@ -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();
}
}
}

View File

@ -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