diff --git a/src/main/java/fr/la_banquise/backend/data/model/Instance.java b/src/main/java/fr/la_banquise/backend/data/model/Instance.java index 23d38f7..6afed1c 100644 --- a/src/main/java/fr/la_banquise/backend/data/model/Instance.java +++ b/src/main/java/fr/la_banquise/backend/data/model/Instance.java @@ -4,20 +4,24 @@ import com.fasterxml.jackson.annotation.JsonBackReference; import io.quarkus.hibernate.orm.panache.PanacheEntity; import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; -import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; /** * Instances */ @Entity -@AllArgsConstructor @NoArgsConstructor @Table(name = "instance") -public class Instance extends PanacheEntity { +public class Instance { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Long id; public String name; public String ssh; public String pwd; @@ -27,7 +31,15 @@ public class Instance extends PanacheEntity { @JoinColumn(name = "user_id", nullable = false) public User user; - @ManyToOne + @ManyToOne @JoinColumn(name = "practical_id") public Tp tp; + + public Instance(String name, String ssh, String pwd, User user, Tp tp) { + this.name = name; + this.ssh = ssh; + this.pwd = pwd; + this.user = user; + this.tp = tp; + } } diff --git a/src/main/java/fr/la_banquise/backend/data/model/Tp.java b/src/main/java/fr/la_banquise/backend/data/model/Tp.java index cf19f91..b48a5b7 100644 --- a/src/main/java/fr/la_banquise/backend/data/model/Tp.java +++ b/src/main/java/fr/la_banquise/backend/data/model/Tp.java @@ -2,6 +2,9 @@ package fr.la_banquise.backend.data.model; import io.quarkus.hibernate.orm.panache.PanacheEntity; import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @@ -13,10 +16,21 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Table(name = "tp") -public class Tp extends PanacheEntity { +public class Tp { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Long id; public String name; public String description; public String pdfLink; public String respo; public String date; + + public Tp(String name, String description, String pdfLink, String respo, String date) { + this.name = name; + this.description = description; + this.pdfLink = pdfLink; + this.respo = respo; + this.date = date; + } } diff --git a/src/main/java/fr/la_banquise/backend/data/model/User.java b/src/main/java/fr/la_banquise/backend/data/model/User.java index 6b37ea0..2e9aec6 100644 --- a/src/main/java/fr/la_banquise/backend/data/model/User.java +++ b/src/main/java/fr/la_banquise/backend/data/model/User.java @@ -7,6 +7,9 @@ import com.fasterxml.jackson.annotation.JsonManagedReference; import io.quarkus.hibernate.orm.panache.PanacheEntity; import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import lombok.AllArgsConstructor; @@ -23,10 +26,19 @@ import lombok.Setter; @Setter @NoArgsConstructor @AllArgsConstructor -public class User extends PanacheEntity { +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Long id; public String name; @JsonManagedReference @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) public List instances; + + public User(String name, List instances) { + this.name = name; + this.instances = instances; + } + } diff --git a/src/main/java/fr/la_banquise/backend/data/repository/UserRepository.java b/src/main/java/fr/la_banquise/backend/data/repository/UserRepository.java index 8da6637..f17f5a4 100644 --- a/src/main/java/fr/la_banquise/backend/data/repository/UserRepository.java +++ b/src/main/java/fr/la_banquise/backend/data/repository/UserRepository.java @@ -9,4 +9,7 @@ import jakarta.enterprise.context.ApplicationScoped; */ @ApplicationScoped public class UserRepository implements PanacheRepository { + public User findByName(String name) { + return find("name", name).firstResult(); + } } diff --git a/src/main/java/fr/la_banquise/backend/rest/Endpoints.java b/src/main/java/fr/la_banquise/backend/rest/Endpoints.java index 2f34ed3..ce4da5f 100644 --- a/src/main/java/fr/la_banquise/backend/rest/Endpoints.java +++ b/src/main/java/fr/la_banquise/backend/rest/Endpoints.java @@ -29,7 +29,12 @@ public class Endpoints { public Response getDashboard() { String username = identity.getPrincipal().getName(); DashboardResponse dashboard = new DashboardResponse(); - dashboard.tps = tpService.getAllTps(); + if (identity.getRoles().contains("root")) { + dashboard.tps = tpService.getAllTpsAdmin(); + } else { + + dashboard.tps = tpService.getAllTps(identity.getPrincipal().getName()); + } dashboard.instances = instanceService.getAllInstances(username); return Response.ok(dashboard).build(); } diff --git a/src/main/java/fr/la_banquise/backend/rest/TpEndpoints.java b/src/main/java/fr/la_banquise/backend/rest/TpEndpoints.java index 1c17ae1..0925a55 100644 --- a/src/main/java/fr/la_banquise/backend/rest/TpEndpoints.java +++ b/src/main/java/fr/la_banquise/backend/rest/TpEndpoints.java @@ -30,13 +30,19 @@ public class TpEndpoints { @GET @Produces(MediaType.APPLICATION_JSON) public Response getAllTps() { - return Response.ok(tpService.getAllTps()).build(); + if (identity.getRoles().contains("root")) { + return Response.ok(tpService.getAllTpsAdmin()).build(); + } + return Response.ok(tpService.getAllTps(identity.getPrincipal().getName())).build(); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("{id}") public Response getTp(@PathParam("id") Long id) { + if (identity.getRoles().contains("root")) { + return Response.ok(tpService.getTpAdmin(id)).build(); + } return Response.ok(tpService.getTp(id, identity.getPrincipal().getName())).build(); } 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 55eb6cd..233cff8 100644 --- a/src/main/java/fr/la_banquise/backend/rest/UserEndpoints.java +++ b/src/main/java/fr/la_banquise/backend/rest/UserEndpoints.java @@ -1,8 +1,5 @@ package fr.la_banquise.backend.rest; -import java.util.ArrayList; -import java.util.List; - import fr.la_banquise.backend.rest.request.BulkUserRequest; import fr.la_banquise.backend.rest.request.UserRequest; import fr.la_banquise.backend.rest.response.LoggedUserResponse; diff --git a/src/main/java/fr/la_banquise/backend/rest/response/PracticalResponse.java b/src/main/java/fr/la_banquise/backend/rest/response/PracticalResponse.java index b5585dd..7348f5b 100644 --- a/src/main/java/fr/la_banquise/backend/rest/response/PracticalResponse.java +++ b/src/main/java/fr/la_banquise/backend/rest/response/PracticalResponse.java @@ -1,5 +1,6 @@ package fr.la_banquise.backend.rest.response; +import io.smallrye.common.constraint.Nullable; import lombok.AllArgsConstructor; /** @@ -13,7 +14,10 @@ public class PracticalResponse { public String respo; public String endDate; + @Nullable public String instanceName; + @Nullable public String pwd; + @Nullable public String ssh; } diff --git a/src/main/java/fr/la_banquise/backend/services/InstanceService.java b/src/main/java/fr/la_banquise/backend/services/InstanceService.java index e0f4d5c..b88ba9b 100644 --- a/src/main/java/fr/la_banquise/backend/services/InstanceService.java +++ b/src/main/java/fr/la_banquise/backend/services/InstanceService.java @@ -6,6 +6,8 @@ import fr.la_banquise.backend.data.model.Instance; import fr.la_banquise.backend.data.model.Tp; import fr.la_banquise.backend.data.model.User; import fr.la_banquise.backend.data.repository.InstanceRepository; +import fr.la_banquise.backend.data.repository.TpRepository; +import fr.la_banquise.backend.data.repository.UserRepository; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.transaction.Transactional; @@ -19,13 +21,18 @@ public class InstanceService { @Inject InstanceRepository instanceRepository; + @Inject + UserRepository userRepository; + + @Inject + TpRepository tpRepository; + public List getAllInstances() { return instanceRepository.findAll().list(); } public List getAllInstances(String username) { - User user = User.find("name", username).firstResult(); - System.out.println(username); + User user = userRepository.findByName(username); return instanceRepository.find("user", user).list(); } @@ -35,9 +42,8 @@ public class InstanceService { @Transactional public Instance createInstance(String name, String ssh, String pwd, String username, Long tpId) { - System.out.println(tpId); - User user = User.find("name", username).firstResult(); - Tp tp = Tp.findById(tpId); + User user = userRepository.findByName(username); + Tp tp = tpRepository.findById(tpId); Instance instance = new Instance(name, ssh, pwd, user, tp); instanceRepository.persist(instance); return instance; @@ -45,7 +51,7 @@ public class InstanceService { @Transactional public Instance createInstance(String name, String ssh, String pwd, User user, Long tpId) { - Tp tp = Tp.findById(tpId); + Tp tp = tpRepository.findById(tpId); Instance instance = new Instance(name, ssh, pwd, user, tp); instanceRepository.persist(instance); return instance; diff --git a/src/main/java/fr/la_banquise/backend/services/TpService.java b/src/main/java/fr/la_banquise/backend/services/TpService.java index 6b5e83a..c8254a4 100644 --- a/src/main/java/fr/la_banquise/backend/services/TpService.java +++ b/src/main/java/fr/la_banquise/backend/services/TpService.java @@ -1,16 +1,21 @@ package fr.la_banquise.backend.services; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import fr.la_banquise.backend.data.model.Instance; import fr.la_banquise.backend.data.model.Tp; import fr.la_banquise.backend.data.model.User; +import fr.la_banquise.backend.data.repository.InstanceRepository; import fr.la_banquise.backend.data.repository.TpRepository; +import fr.la_banquise.backend.data.repository.UserRepository; import fr.la_banquise.backend.rest.request.TpRequest; 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; /** * TpService @@ -18,27 +23,49 @@ import jakarta.transaction.Transactional; @ApplicationScoped public class TpService { + @Inject + SecurityContext security; + @Inject TpRepository tpRepository; - public List getAllTps() { + @Inject + UserRepository userRepository; + + @Inject + InstanceRepository instanceRepository; + + public List getAllTpsAdmin() { return tpRepository.listAll(); } + public List getAllTps(String username) { + return tpRepository.listAll().stream() + .filter(tp -> instanceRepository.find("name = ?1 AND tp = ?2", username, tp) == null) + .collect(Collectors.toList()); + } + public PracticalResponse getTp(Long id, String username) { - User user = User.find("name", username).firstResult(); + User user = userRepository.findByName(username); Tp tp = tpRepository.findById(id); - Instance instance = Instance.find("user", user).firstResult(); + Instance instance = instanceRepository.find("name = ?1 AND tp = ?2", user.name, tp).firstResult(); PracticalResponse res = new PracticalResponse(tp.name, tp.description, tp.pdfLink, tp.respo, tp.date, instance.name, instance.pwd, instance.ssh); return res; } + public PracticalResponse getTpAdmin(Long id) { + Tp tp = tpRepository.findById(id); + return new PracticalResponse(tp.name, tp.description, tp.pdfLink, tp.respo, tp.date, + "", + "", ""); + } + @Transactional public Tp createTp(TpRequest requestTp) { - User user = User.find("name", "admin").firstResult(); - Tp tp = new Tp(requestTp.title, requestTp.description, requestTp.pdf, "", requestTp.date); + Tp tp = new Tp(requestTp.title, requestTp.description, requestTp.pdf, security.getUserPrincipal().getName(), + requestTp.date); tpRepository.persist(tp); return tp; }