feat: changed few things

This commit is contained in:
Malo BEAUCHAMPS 2024-10-18 17:55:13 +02:00
parent ec8a0db1be
commit cd041b40d3
10 changed files with 108 additions and 22 deletions

View File

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

View File

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

View File

@ -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<Instance> instances;
public User(String name, List<Instance> instances) {
this.name = name;
this.instances = instances;
}
}

View File

@ -9,4 +9,7 @@ import jakarta.enterprise.context.ApplicationScoped;
*/
@ApplicationScoped
public class UserRepository implements PanacheRepository<User> {
public User findByName(String name) {
return find("name", name).firstResult();
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -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<Instance> getAllInstances() {
return instanceRepository.findAll().list();
}
public List<Instance> 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;

View File

@ -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<Tp> getAllTps() {
@Inject
UserRepository userRepository;
@Inject
InstanceRepository instanceRepository;
public List<Tp> getAllTpsAdmin() {
return tpRepository.listAll();
}
public List<Tp> 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;
}