a lot of changes again

This commit is contained in:
Arthur Wambst 2025-08-19 00:46:22 +02:00
parent 97ee77a8a6
commit 31cb26e54c
No known key found for this signature in database
24 changed files with 491 additions and 211 deletions

View File

@ -0,0 +1,72 @@
/**package fr.la_banquise.backend.data.model;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.command.InspectContainerResponse.ContainerState;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Ports;
import jakarta.inject.Inject;
import jakarta.persistence.Column;
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.SequenceGenerator;
import jakarta.persistence.Table;
import java.util.List;
import lombok.NoArgsConstructor;
/**
* Instances
@Entity
@NoArgsConstructor
@Table(name = "dockerfile")
public class Dockerfile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "DockerfileSeq",
sequenceName = "dockerfile_id_seq", allocationSize = 1,
initialValue = 1)
public Long id;
@Column(unique = true) public String name;
public String text;
@JsonIgnore
public List<Instance> instances;
public Dockerfile(String name, String text) {
this.name = name;
this.text = text;
}
public Dockerfile() {}
public boolean isCreated() { return containerId != null && status != null; }
public boolean createContainer(String containerName, int port) {
ExposedPort tcpSsh = ExposedPort.tcp(80);
Ports portBindings = new Ports();
portBindings.bind(tcpSsh, Ports.Binding.bindPort(port));
HostConfig hostConfig =
HostConfig.newHostConfig().withPortBindings(portBindings);
CreateContainerResponse container =
dockerClient.createContainerCmd("nginx:latest")
.withName(containerName)
.withExposedPorts(tcpSsh)
.withHostConfig(hostConfig)
.exec();
this.containerId = container.getId();
return true;
};
}**/

View File

@ -1,6 +1,7 @@
package fr.la_banquise.backend.data.model;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.github.dockerjava.api.model.Container;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
@ -24,28 +25,22 @@ public class Instance {
allocationSize = 1, initialValue = 1)
public Long id;
public String name;
public String ssh;
public Long port;
public String pwd;
public Container container;
@JsonBackReference
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
public User user;
public User owner;
@ManyToOne
@JoinColumn(name = "practical_id", nullable = false)
public Tp tp;
public Sujet sujet;
public Instance(String name, String ssh, String pwd, Long port, User user,
Tp tp) {
public Instance(String name, Long port, User user, Sujet sujet) {
this.name = name;
this.ssh = ssh;
this.pwd = pwd;
this.port = port;
this.user = user;
this.tp = tp;
this.owner = user;
this.sujet = sujet;
}
public Instance() {}
}

View File

@ -6,9 +6,12 @@ import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@ -24,19 +27,24 @@ public class Ji {
public Long id;
public String name;
public String description;
public String respo;
@ManyToMany
@JoinTable(
name = "ji_user", // Table de liaison
joinColumns = @JoinColumn(name = "ji_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
public List<User> respos;
public String date;
@ManyToOne @JoinColumn(name = "site_id") @JsonIgnore public Site site;
public Ji(String name, String description, String respo, String date,
public Ji(String name, String description, List<User> respos, String date,
Site site) {
this.name = name;
this.description = description;
this.respo = respo;
this.respos = respos;
this.date = date;
this.site = site;
}
public Ji() {}
}

View File

@ -46,5 +46,5 @@ public class Site {
description + "', address='" + address + "'}";
}
public Site() {}
//public Site() {}
}

View File

@ -1,11 +1,16 @@
package fr.la_banquise.backend.data.model;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@ -15,27 +20,29 @@ import lombok.NoArgsConstructor;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "tp")
public class Tp {
@Table(name = "Sujet")
public class Sujet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "TpSeq", sequenceName = "tp_id_seq",
@SequenceGenerator(name = "SujetSeq", sequenceName = "sujet_id_seq",
allocationSize = 1, initialValue = 1)
public Long id;
public String name;
public String description;
public String pdfLink;
public String respo;
public String date;
@ManyToMany
@JoinTable(
name = "sujet_user", // Table de liaison
joinColumns = @JoinColumn(name = "sujet_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
public List<User> respos;
public Tp(String name, String description, String pdfLink, String respo,
String date) {
public Sujet(String name, String description, String pdfLink,
List<User> respos) {
this.name = name;
this.description = description;
this.pdfLink = pdfLink;
this.respo = respo;
this.date = date;
this.respos = respos;
}
public Tp() {}
}

View File

@ -10,6 +10,7 @@ import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.OneToMany;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
@ -40,9 +41,15 @@ public class User {
@Roles public String role;
@JsonManagedReference
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL)
public List<Instance> instances;
@ManyToMany(mappedBy = "respos", cascade = CascadeType.ALL)
public List<Sujet> sujetRespo;
@ManyToMany(mappedBy = "respos", cascade = CascadeType.ALL)
public List<Ji> jiRespo;
public User(String name, String password, String role,
List<Instance> instances) {
this.name = name;
@ -51,5 +58,5 @@ public class User {
this.instances = instances;
}
public User() {}
//public User() {}
}

View File

@ -0,0 +1,12 @@
/**package fr.la_banquise.backend.data.repository;
import fr.la_banquise.backend.data.model.Container;
import io.quarkus.hibernate.orm.panache.PanacheRepository;
import jakarta.enterprise.context.ApplicationScoped;
/**
* InstanceRepository
@ApplicationScoped
public class ContainerRepository implements PanacheRepository<Container> {
}*/

View File

@ -1,6 +1,6 @@
package fr.la_banquise.backend.data.repository;
import fr.la_banquise.backend.data.model.Tp;
import fr.la_banquise.backend.data.model.Sujet;
import io.quarkus.hibernate.orm.panache.PanacheRepository;
import jakarta.enterprise.context.ApplicationScoped;
@ -8,4 +8,4 @@ import jakarta.enterprise.context.ApplicationScoped;
* TpRepository
*/
@ApplicationScoped
public class TpRepository implements PanacheRepository<Tp> {}
public class SujetRepository implements PanacheRepository<Sujet> {}

View File

@ -2,7 +2,7 @@ package fr.la_banquise.backend.rest;
import fr.la_banquise.backend.rest.response.DashboardResponse;
import fr.la_banquise.backend.services.InstanceService;
import fr.la_banquise.backend.services.TpService;
import fr.la_banquise.backend.services.SujetService;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
@ -22,7 +22,7 @@ public class Endpoints {
InstanceService instanceService;
@Inject
TpService tpService;
SujetService sujetService;
@GET
@Path("dashboard")
@ -30,10 +30,10 @@ public class Endpoints {
String username = identity.getPrincipal().getName();
DashboardResponse dashboard = new DashboardResponse();
if (identity.getRoles().contains("root")) {
dashboard.tps = tpService.getAllTpsAdmin();
dashboard.tps = sujetService.getAllSujetsAdmin();
} else {
dashboard.tps = tpService.getAllTps(identity.getPrincipal().getName());
dashboard.tps = sujetService.getAllSujetsRespo(identity.getPrincipal().getName());
}
dashboard.instances = instanceService.getAllInstances(username);
return Response.ok(dashboard).build();

View File

@ -27,7 +27,7 @@ public class JiResource {
@Produces(MediaType.APPLICATION_JSON)
public Response listall() {
try {
List<Ji> ji = jiService.getAllJi();
List<Ji> ji = jiService.getAllJiAdmin();
return Response.ok(ji).build();
} catch (Exception e) {
return Response.status(500)
@ -45,7 +45,7 @@ public class JiResource {
@QueryParam("respo") String respo,
@QueryParam("site") String name_site) {
try {
Ji jsp = jiService.createJi(name, desc, address, respo, name_site);
Ji jsp = jiService.createJi(name, desc, address, name_site);
return Response.ok(Map.of("created", jsp)).build();
} catch (Exception e) {
return Response.status(500)

View File

@ -0,0 +1,45 @@
package fr.la_banquise.backend.rest;
import fr.la_banquise.backend.rest.request.SujetRequest;
import fr.la_banquise.backend.services.SujetService;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.annotation.security.RolesAllowed;
import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
/**
* TpEndpoints
*/
@Path("/api/subject")
public class SujetEndpoints {
@Inject SecurityIdentity identity;
@Inject SujetService sujetService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllSujetsRespo() {
if (identity.getRoles().contains("root")) {
return Response.ok(sujetService.getAllSujetsAdmin()).build();
}
return Response
.ok(sujetService.getAllSujetsRespo(
identity.getPrincipal().getName()))
.build();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@RolesAllowed("root")
public Response createSujet(SujetRequest sujet) {
return Response.ok(sujetService.createSujet(sujet)).build();
}
}

View File

@ -1,56 +0,0 @@
package fr.la_banquise.backend.rest;
import fr.la_banquise.backend.services.TpService;
import io.quarkus.security.identity.SecurityIdentity;
import fr.la_banquise.backend.rest.request.TpRequest;
import jakarta.annotation.security.RolesAllowed;
import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
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.core.MediaType;
import jakarta.ws.rs.core.Response;
/**
* TpEndpoints
*/
@Path("/api/tps")
public class TpEndpoints {
@Inject
SecurityIdentity identity;
@Inject
TpService tpService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllTps() {
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();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@RolesAllowed("root")
public Response createTp(TpRequest tp) {
System.out.println(tp.date);
return Response.ok(tpService.createTp(tp)).build();
}
}

View File

@ -36,7 +36,7 @@ public class UserEndpoints {
}
@GET
@RolesAllowed("root")
//@RolesAllowed("root")
public Response getAllUsers() {
return Response.ok(userService.getAllUsers()).build();
}
@ -49,7 +49,7 @@ public class UserEndpoints {
}
@POST
@RolesAllowed("root")
//@RolesAllowed("root")
public Response createUser(UserRequest user) {
return Response.ok(userService.createUser(user)).build();
}

View File

@ -3,7 +3,7 @@ package fr.la_banquise.backend.rest.request;
/**
* TpRequest
*/
public class TpRequest {
public class SujetRequest {
public String title;
public String description;
public String pdf;

View File

@ -3,7 +3,7 @@ package fr.la_banquise.backend.rest.response;
import java.util.List;
import fr.la_banquise.backend.data.model.Instance;
import fr.la_banquise.backend.data.model.Tp;
import fr.la_banquise.backend.data.model.Sujet;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
@ -12,6 +12,6 @@ import lombok.AllArgsConstructor;
*/
@RegisterForReflection
public class DashboardResponse {
public List<Tp> tps;
public List<Sujet> tps;
public List<Instance> instances;
}

View File

@ -1,8 +1,7 @@
package fr.la_banquise.backend.rest.response;
import java.util.Set;
import io.quarkus.runtime.annotations.RegisterForReflection;
import java.util.Set;
import lombok.AllArgsConstructor;
/**

View File

@ -1,27 +1,28 @@
package fr.la_banquise.backend.rest.response;
import fr.la_banquise.backend.data.model.User;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.smallrye.common.constraint.Nullable;
import java.util.List;
import lombok.AllArgsConstructor;
/**
* PracticalResponse
*/
//@AllArgsConstructor
@AllArgsConstructor
@RegisterForReflection
public class PracticalResponse {
public String name;
public String description;
public String pdfLink;
public String respo;
public String endDate;
public List<User> respos;
@Nullable public String instanceName;
@Nullable public String pwd;
@Nullable public String ssh;
@Nullable public Long port;
public PracticalResponse(String name, String description, String pdfLink,
/*public PracticalResponse(String name, String description, String pdfLink,
String respo, String date,
@Nullable String InstanceName,
@Nullable String pwd, @Nullable String ssh,
@ -35,5 +36,5 @@ public class PracticalResponse {
this.port = port;
this.ssh = ssh;
this.pwd = pwd;
}
}*/
}

View File

@ -0,0 +1,181 @@
/**package fr.la_banquise.backend.services;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.command.InspectContainerResponse;
// import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.ContainerPort;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Ports;
import fr.la_banquise.backend.data.model.Container;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ApplicationScoped
public class ContainerService {
@Inject DockerClient dockerClient;
public String createAndStartNginx() {
ExposedPort tcp80 = ExposedPort.tcp(80);
Ports portBindings = new Ports();
portBindings.bind(tcp80, Ports.Binding.bindPort(8081));
HostConfig hostConfig =
HostConfig.newHostConfig().withPortBindings(portBindings);
Map<String, String> labels = new HashMap<>();
labels.put("test", "banquise");
labels.put("environment", "development");
labels.put("version", "1.0");
labels.put("created-by", "java-docker-api");
CreateContainerResponse container =
dockerClient.createContainerCmd("nginx:latest")
.withName("my-nginx")
.withLabels(labels)
.withExposedPorts(tcp80)
.withHostConfig(hostConfig)
.exec();
dockerClient.startContainerCmd(container.getId()).exec();
return container.getId();
}
public Container createContainer() {
Container container =
dockerClient
.createContainerCmd("nginx:latest")
// dockerClient.startContainerCmd(container.getId()).exec();
return container.createContainer();
}
/*
public String listAllContainers() {
StringBuilder json = new StringBuilder();
List<Container> containers = dockerClient.listContainersCmd()
.withShowAll(true)
.exec();
json.append("[");
for (int i = 0; i < containers.size(); i++) {
Container container = containers.get(i);
json.append("{");
json.append("\"name\":\"").append(container.getNames()[0].substring(1)).append("\",");
json.append("\"id\":\"").append(container.getId()).append("\",");
json.append("\"image\":\"").append(container.getImage()).append("\",");
json.append("\"status\":\"").append(container.getStatus()).append("\",");
// Ports
InspectContainerResponse inspectResponse =
dockerClient.inspectContainerCmd(container.getId()).exec();
json.append("\"ports\":[");
if (container.getPorts() != null && container.getPorts().length > 0) {
for (int j = 0; j < .length; j+=2) {
ContainerPort port = container.getPorts()[j];
json.append("[\"");
json.append(port.getPrivatePort()).append("->").append(port.getPublicPort()).append("/"+port.getType()+"\",\"");
json.append(port.getIp()).append(",").append((container.getPorts()[j+1]).getIp());
if (port.getType() != null) {
json.append("/").append(port.getType());
}
if (port.getPublicPort() != null) {
json.append("->").append(port.getPublicPort());
}*
json.append("\"]");
if (j < container.getPorts().length - 2) {
json.append(",");
}
}
}
json.append("]");
// Ports
String ports = "[]";
try {
InspectContainerResponse inspectResponse =
dockerClient.inspectContainerCmd(container.getId()).exec(); if
(inspectResponse.getConfig().getExposedPorts() != null) { ports =
inspectResponse.getConfig().getExposedPorts().toString();
}
} catch (Exception e) {
// Fallback vers les ports runtime si inspect échoue
if (container.getPorts() != null && container.getPorts().length
> 0) { ports = java.util.Arrays.toString(container.getPorts());
}
}
json.append("\"ports\":\"").append(ports).append("\"");
json.append("}");
if (i < containers.size() - 1) {
json.append(",");
}
json.append("}");
if (i < containers.size() - 1) {
json.append(",");
}
}
json.append("]");
return json.toString();
}
public String listAllContainers() {
StringBuilder json = new StringBuilder();
List<Container> containers = dockerClient.listContainersCmd()
.withShowAll(true)
.exec();
json.append("[");
for (int i = 0; i < containers.size(); i++) {
Container container = containers.get(i);
// Ports
List<String> portsList = new ArrayList<>();
try {
var inspectResponse =
dockerClient.inspectContainerCmd(container.getId()).exec(); if
(inspectResponse.getConfig().getExposedPorts() != null) { var exposedPorts =
inspectResponse.getConfig().getExposedPorts(); int count = 0; for (var port
: exposedPorts) { if (count > 0) portsList.append(",");
portsList.append(String.format("\"%s\"",
port.toString())); count = 1;
}
portsList.append("]");
ports = portsList.toString();
}
} catch (Exception e) {
// Fallback vers les ports runtime si inspect échoue
if (container.getPorts() != null && container.getPorts().length
> 0) { ports = java.util.Arrays.toString(container.getPorts());
}
}
//json.append(containerJson);
if (i < containers.size() - 1) {
json.append(",");
}
}
json.append("]");
return json.toString();
}/
public String listAllContainers() { return ""; }
public void start(String containerId) {
dockerClient.startContainerCmd(containerId).exec();
}
public void stop(String containerId) {
dockerClient.stopContainerCmd(containerId).exec();
}
public void remove(String containerId) {
dockerClient.removeContainerCmd(containerId).exec();
}
}*/

View File

@ -1,16 +1,15 @@
package fr.la_banquise.backend.services;
import java.util.List;
import fr.la_banquise.backend.data.model.Instance;
import fr.la_banquise.backend.data.model.Tp;
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.TpRepository;
import fr.la_banquise.backend.data.repository.SujetRepository;
import fr.la_banquise.backend.data.repository.UserRepository;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import java.util.List;
/**
* InstanceService
@ -18,14 +17,11 @@ import jakarta.transaction.Transactional;
@ApplicationScoped
public class InstanceService {
@Inject
InstanceRepository instanceRepository;
@Inject InstanceRepository instanceRepository;
@Inject
UserRepository userRepository;
@Inject UserRepository userRepository;
@Inject
TpRepository tpRepository;
@Inject SujetRepository sujetRepository;
public List<Instance> getAllInstances() {
return instanceRepository.findAll().list();
@ -41,18 +37,20 @@ public class InstanceService {
}
@Transactional
public Instance createInstance(String name, String ssh, String pwd, Long port, String username, Long tpId) {
public Instance createInstance(String name, String ssh, String pwd,
Long port, String username, Long sujetId) {
User user = userRepository.findByName(username);
Tp tp = tpRepository.findById(tpId);
Instance instance = new Instance(name, ssh, pwd, port, user, tp);
Sujet sujet = sujetRepository.findById(sujetId);
Instance instance = new Instance(name, port, user, sujet);
instanceRepository.persist(instance);
return instance;
}
@Transactional
public Instance createInstance(String name, String ssh, String pwd, Long port, User user, Long tpId) {
Tp tp = tpRepository.findById(tpId);
Instance instance = new Instance(name, ssh, pwd, port, user, tp);
public Instance createInstance(String name, String ssh, String pwd,
Long port, User user, Long sujetId) {
Sujet sujet = sujetRepository.findById(sujetId);
Instance instance = new Instance(name, port, user, sujet);
instanceRepository.persist(instance);
return instance;
}

View File

@ -2,30 +2,42 @@ package fr.la_banquise.backend.services;
import fr.la_banquise.backend.data.model.Ji;
import fr.la_banquise.backend.data.model.Site;
import fr.la_banquise.backend.data.model.User;
import fr.la_banquise.backend.data.repository.JiRepository;
import fr.la_banquise.backend.data.repository.UserRepository;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.core.SecurityContext;
import java.util.List;
@ApplicationScoped
public class JiService {
@Inject JiRepository jiRepository;
@Inject UserRepository userRepository;
@Inject SiteService siteService;
@Inject SecurityContext security;
@Transactional
public Ji createJi(String name, String description, String address,
String respo, String site_name) {
String site_name) {
Site site = siteService.getSiteByName(site_name);
Ji ji = new Ji(name, description, address, respo, site);
User currentUser =
userRepository.findByName(security.getUserPrincipal().getName());
Ji ji = new Ji(name, description, List.of(currentUser), "date", site);
jiRepository.persist(ji);
siteService.addJi(site, ji);
return ji;
}
public List<Ji> getAllJi() { return jiRepository.listAll(); }
public List<Ji> getAllJiAdmin() { return jiRepository.listAll(); }
public List<Ji> getAllJiRespo(String username) {
User user = userRepository.findByName(username);
return user.jiRespo;
}
public Ji getJiByName(String name) {
return jiRepository.find("name", name).firstResult();

View File

@ -0,0 +1,81 @@
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
*/
@ApplicationScoped
public class SujetService {
@Inject SecurityContext security;
@Inject SujetRepository sujetRepository;
@Inject UserRepository userRepository;
@Inject InstanceRepository instanceRepository;
public List<Sujet> getAllSujetsAdmin() { return sujetRepository.listAll(); }
public List<Sujet> getAllSujetsRespo(String username) {
User user = userRepository.findByName(username);
return user.sujetRespo;
}
/*public PracticalResponse getTp(Long id, String username) {
User user = userRepository.findByName(username);
Sujet sujet = sujetRepository.findById(id);
Instance instance =
instanceRepository.find("user = ?1 AND tp = ?2", user, sujet)
.firstResult();
PracticalResponse res = new PracticalResponse(
sujet.name, sujet.description, sujet.pdfLink, sujet.respos,
instance.name, instance.pwd, instance.ssh, instance.port);
return res;
}
/*public PracticalResponse getTpAdmin(Long id) {
Sujet sujet = sujetRepository.findById(id);
return new PracticalResponse(sujet.name, sujet.description,
sujet.pdfLink, sujet.respos, "", "", "",
0L);
}*/
@Transactional
public Sujet createSujet(SujetRequest requestSujet) {
User currentUser =
userRepository.findByName(security.getUserPrincipal().getName());
Sujet sujet = new Sujet(requestSujet.title, requestSujet.description,
requestSujet.pdf, List.of(currentUser));
sujetRepository.persist(sujet);
return sujet;
}
@Transactional
public void deleteSujet(Long id) {
sujetRepository.deleteById(id);
}
/*
* TODO: Seuls les respos du sujet et root doivent pouvoir avoir acces
* @Transactional
public Sujet updateSujet(Long id) {
Sujet sujet = sujetRepository.findById(id);
return sujet;
}*/
}

View File

@ -1,82 +0,0 @@
package fr.la_banquise.backend.services;
import java.text.Collator;
import java.util.List;
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
*/
@ApplicationScoped
public class TpService {
@Inject
SecurityContext security;
@Inject
TpRepository tpRepository;
@Inject
UserRepository userRepository;
@Inject
InstanceRepository instanceRepository;
public List<Tp> getAllTpsAdmin() {
return tpRepository.listAll();
}
public List<Tp> getAllTps(String username) {
User user = userRepository.findByName(username);
List<Instance> instances = instanceRepository.find("user = ?1 AND tp IS NOT NULL", user).list();
return tpRepository.find("id in ?1", instances.stream().map(i -> i.tp.id).collect(Collectors.toList())).list();
}
public PracticalResponse getTp(Long id, String username) {
User user = userRepository.findByName(username);
Tp tp = tpRepository.findById(id);
Instance instance = instanceRepository.find("user = ?1 AND tp = ?2", user, tp).firstResult();
PracticalResponse res = new PracticalResponse(tp.name, tp.description, tp.pdfLink, tp.respo, tp.date,
instance.name,
instance.pwd, instance.ssh, instance.port);
return res;
}
/* public PracticalResponse getTpAdmin(Long id) {
Tp tp = tpRepository.findById(id);
return new PracticalResponse(tp.name, tp.description, tp.pdfLink, tp.respo,
"",
"", "", 0L);
}*/
/*@Transactional
public Tp createTp(TpRequest requestTp) {
Tp tp = new Tp(requestTp.title, requestTp.description, requestTp.pdf, security.getUserPrincipal().getName(), requestTp.date);
tpRepository.persist(tp);
return tp;
}*/
@Transactional
public void deleteTp(Long id) {
tpRepository.deleteById(id);
}
@Transactional
public Tp updateTp(Long id) {
Tp tp = tpRepository.findById(id);
return tp;
}
}

View File

@ -58,7 +58,7 @@ public class UserService {
public void deleteJDMI() {
for (Instance instance : instanceService.getAllInstances()) {
instanceService.deleteInstance(instance.id);
userRepository.deleteById(instance.user.id);
userRepository.deleteById(instance.owner.id);
}
}

View File

@ -38,4 +38,4 @@ quarkus.quinoa.dev-server.port=5173
quarkus.quinoa.enable-spa-routing=true
quarkus.docker.docker-host=unix:///run/user/1000/docker.sock
quarkus.security.auth.enabled-in-dev-mode=false
#quarkus.security.auth.enabled-in-dev-mode=false