refactor: experiencing with clang format

This commit is contained in:
Arthur Wambst 2025-08-02 03:06:12 +02:00
parent 7a984cb7d2
commit 887090bf49
15 changed files with 380 additions and 376 deletions

View File

@ -1,7 +1,6 @@
package fr.la_banquise.backend.data.model; package fr.la_banquise.backend.data.model;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
@ -21,7 +20,8 @@ import lombok.NoArgsConstructor;
public class Instance { public class Instance {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "InstanceSeq", sequenceName = "instance_id_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name = "InstanceSeq", sequenceName = "instance_id_seq",
allocationSize = 1, initialValue = 1)
public Long id; public Long id;
public String name; public String name;
public String ssh; public String ssh;
@ -37,7 +37,8 @@ public class Instance {
@JoinColumn(name = "practical_id", nullable = false) @JoinColumn(name = "practical_id", nullable = false)
public Tp tp; public Tp tp;
public Instance(String name, String ssh, String pwd, Long port, User user, Tp tp) { public Instance(String name, String ssh, String pwd, Long port, User user,
Tp tp) {
this.name = name; this.name = name;
this.ssh = ssh; this.ssh = ssh;
this.pwd = pwd; this.pwd = pwd;

View File

@ -5,13 +5,13 @@ import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.SequenceGenerator; import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import java.util.List;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.JoinColumn;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@ -20,18 +20,18 @@ import jakarta.persistence.JoinColumn;
public class Ji { public class Ji {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "JiSeq", sequenceName = "ji_id_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name = "JiSeq", sequenceName = "ji_id_seq",
allocationSize = 1, initialValue = 1)
public Long id; public Long id;
public String name; public String name;
public String description; public String description;
public String respo; public String respo;
public String date; public String date;
@ManyToOne @ManyToOne @JoinColumn(name = "site_id") public Site site;
@JoinColumn(name = "site_id")
public Site site;
public Ji(String name, String description, String respo, String date, Site site) { public Ji(String name, String description, String respo, String date,
Site site) {
this.name = name; this.name = name;
this.description = description; this.description = description;
this.respo = respo; this.respo = respo;

View File

@ -1,42 +1,36 @@
package fr.la_banquise.backend.data.model; package fr.la_banquise.backend.data.model;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.SequenceGenerator; import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint; import jakarta.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Set;
import java.util.HashSet;
import jakarta.persistence.OneToMany;
import java.util.List;
import java.util.ArrayList;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table(name = "site", uniqueConstraints = { @Table(name = "site",
@UniqueConstraint(columnNames = "name") uniqueConstraints = { @UniqueConstraint(columnNames = "name") })
})
public class Site { public class Site {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "SiteSeq", sequenceName = "site_id_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name = "SiteSeq", sequenceName = "site_id_seq",
allocationSize = 1, initialValue = 1)
public Long id; public Long id;
@Column(unique = true, nullable = false) @Column(unique = true, nullable = false) public String name;
public String name;
public String description; public String description;
public String address; public String address;
@OneToMany(mappedBy = "site") @OneToMany(mappedBy = "site") public List<Ji> jiInSite;
public List<Ji> jiInSite;
public Site(String name, String description, String address) { public Site(String name, String description, String address) {
this.name = name; this.name = name;
@ -45,9 +39,9 @@ public class Site {
this.jiInSite = new ArrayList<Ji>(); this.jiInSite = new ArrayList<Ji>();
} }
@Override @Override
public String toString() { public String toString() {
return "Site{id=" + id + ", name='" + name + "', description='" + description + "', address='" + address + "'}"; return "Site{id=" + id + ", name='" + name + "', description='" +
description + "', address='" + address + "'}";
} }
} }

View File

@ -1,6 +1,5 @@
package fr.la_banquise.backend.data.model; package fr.la_banquise.backend.data.model;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
@ -20,7 +19,8 @@ import lombok.NoArgsConstructor;
public class Tp { public class Tp {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "TpSeq", sequenceName = "tp_id_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name = "TpSeq", sequenceName = "tp_id_seq",
allocationSize = 1, initialValue = 1)
public Long id; public Long id;
public String name; public String name;
public String description; public String description;
@ -28,7 +28,8 @@ public class Tp {
public String respo; public String respo;
public String date; public String date;
public Tp(String name, String description, String pdfLink, String respo, String date) { public Tp(String name, String description, String pdfLink, String respo,
String date) {
this.name = name; this.name = name;
this.description = description; this.description = description;
this.pdfLink = pdfLink; this.pdfLink = pdfLink;

View File

@ -1,9 +1,6 @@
package fr.la_banquise.backend.data.model; package fr.la_banquise.backend.data.model;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonManagedReference;
import io.quarkus.security.jpa.Password; import io.quarkus.security.jpa.Password;
import io.quarkus.security.jpa.Roles; import io.quarkus.security.jpa.Roles;
import io.quarkus.security.jpa.UserDefinition; import io.quarkus.security.jpa.UserDefinition;
@ -16,6 +13,7 @@ import jakarta.persistence.Id;
import jakarta.persistence.OneToMany; import jakarta.persistence.OneToMany;
import jakarta.persistence.SequenceGenerator; import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import java.util.List;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -34,24 +32,22 @@ import lombok.Setter;
public class User { public class User {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "UserSeq", sequenceName = "user_id_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name = "UserSeq", sequenceName = "user_id_seq",
allocationSize = 1, initialValue = 1)
public Long id; public Long id;
@Username @Username public String name;
public String name; @Password public String password;
@Password @Roles public String role;
public String password;
@Roles
public String role;
@JsonManagedReference @JsonManagedReference
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL) @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
public List<Instance> instances; public List<Instance> instances;
public User(String name, String password, String role, List<Instance> instances) { public User(String name, String password, String role,
List<Instance> instances) {
this.name = name; this.name = name;
this.password = password; this.password = password;
this.role = role; this.role = role;
this.instances = instances; this.instances = instances;
} }
} }

View File

@ -5,5 +5,4 @@ import io.quarkus.hibernate.orm.panache.PanacheRepository;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped @ApplicationScoped
public class SiteRepository implements PanacheRepository<Site> { public class SiteRepository implements PanacheRepository<Site> {}
}

View File

@ -8,5 +8,4 @@ import jakarta.enterprise.context.ApplicationScoped;
* TpRepository * TpRepository
*/ */
@ApplicationScoped @ApplicationScoped
public class TpRepository implements PanacheRepository<Tp> { public class TpRepository implements PanacheRepository<Tp> {}
}

View File

@ -5,7 +5,6 @@ import jakarta.inject.Inject;
import jakarta.ws.rs.*; import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
import java.util.Map; import java.util.Map;
@Path("/containers") @Path("/containers")
@ -13,28 +12,33 @@ import java.util.Map;
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
public class ContainerResource { public class ContainerResource {
@Inject @Inject DockerService dockerService;
DockerService dockerService;
@POST @POST
@Path("/nginx") @Path("/nginx")
public Response launchNginx() { public Response launchNginx() {
try { try {
String id = dockerService.createAndStartNginx(); String id = dockerService.createAndStartNginx();
return Response.ok(Map.of("containerId", id, "status", "running")).build(); return Response.ok(Map.of("containerId", id, "status", "running"))
.build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@POST @POST
@Path("/create") @Path("/create")
public Response createContainer(@QueryParam("name") String name, @QueryParam("port") int port) { public Response createContainer(@QueryParam("name") String name,
@QueryParam("port") int port) {
try { try {
String id = dockerService.createContainer(name, port); String id = dockerService.createContainer(name, port);
return Response.ok(Map.of("containerId", id)).build(); return Response.ok(Map.of("containerId", id)).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@ -45,7 +49,9 @@ public class ContainerResource {
String id = dockerService.listAllContainers(); String id = dockerService.listAllContainers();
return Response.ok(id).build(); return Response.ok(id).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@ -54,9 +60,12 @@ public class ContainerResource {
public Response start(@QueryParam("id") String id) { public Response start(@QueryParam("id") String id) {
try { try {
dockerService.start(id); dockerService.start(id);
return Response.ok(Map.of("containerId", id, "status", "Running")).build(); return Response.ok(Map.of("containerId", id, "status", "Running"))
.build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@ -65,9 +74,12 @@ public class ContainerResource {
public Response stop(@QueryParam("id") String id) { public Response stop(@QueryParam("id") String id) {
try { try {
dockerService.stop(id); dockerService.stop(id);
return Response.ok(Map.of("containerId", id, "status", "removed")).build(); return Response.ok(Map.of("containerId", id, "status", "removed"))
.build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@DELETE @DELETE
@ -75,9 +87,12 @@ public class ContainerResource {
public Response remove(@QueryParam("id") String id) { public Response remove(@QueryParam("id") String id) {
try { try {
dockerService.remove(id); dockerService.remove(id);
return Response.ok(Map.of("containerId", id, "status", "removed")).build(); return Response.ok(Map.of("containerId", id, "status", "removed"))
.build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
} }

View File

@ -2,31 +2,25 @@ package fr.la_banquise.backend.rest;
import fr.la_banquise.backend.data.model.Ji; import fr.la_banquise.backend.data.model.Ji;
import fr.la_banquise.backend.services.JiService; import fr.la_banquise.backend.services.JiService;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.annotation.security.RolesAllowed;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.ws.rs.*; import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.annotation.security.RolesAllowed;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponses;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
import java.util.Map; import java.util.Map;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponses;
@Path("/ji") @Path("/ji")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
public class JiResource { public class JiResource {
@Inject @Inject SecurityIdentity identity;
SecurityIdentity identity;
@Inject
JiService jiService;
@Inject JiService jiService;
@GET @GET
@Path("/listall") @Path("/listall")
@ -36,19 +30,27 @@ public class JiResource {
List<Ji> ji = jiService.getAllJi(); List<Ji> ji = jiService.getAllJi();
return Response.ok(ji).build(); return Response.ok(ji).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@POST @POST
@Path("/create") @Path("/create")
@RolesAllowed("root") @RolesAllowed("root")
public Response createJi(@QueryParam("name") String name, @QueryParam("desc") String desc, @QueryParam("address") String address, @QueryParam("respo") String respo, @QueryParam("site") String name_site) { public Response createJi(@QueryParam("name") String name,
@QueryParam("desc") String desc,
@QueryParam("address") String address,
@QueryParam("respo") String respo,
@QueryParam("site") String name_site) {
try { try {
Ji jsp = jiService.createJi(name, desc, address, respo, name_site); Ji jsp = jiService.createJi(name, desc, address, respo, name_site);
return Response.ok(Map.of("created", jsp)).build(); return Response.ok(Map.of("created", jsp)).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@ -60,7 +62,9 @@ public class JiResource {
Ji ji = jiService.getJiByName(name); Ji ji = jiService.getJiByName(name);
return Response.ok(ji.toString()).build(); return Response.ok(ji.toString()).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@ -68,18 +72,23 @@ public class JiResource {
@Path("/del") @Path("/del")
@RolesAllowed("root") @RolesAllowed("root")
@APIResponses({ @APIResponses({
@APIResponse(responseCode = "200", description = "Successfully deleted"), @APIResponse(responseCode = "200", description = "Successfully deleted")
@APIResponse(responseCode = "500", description = "Internal server error, usually site not found") , @APIResponse(responseCode = "500",
}) description =
public Response deleteJiByName(@QueryParam("name") String name) { "Internal server error, usually site not found")
})
public Response
deleteJiByName(@QueryParam("name") String name) {
try { try {
jiService.deleteJi(name); jiService.deleteJi(name);
return Response.ok().build(); return Response.ok().build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
/* /*
@GET @GET
@Path("/all") @Path("/all")
public Response listContainers() { public Response listContainers() {
@ -87,7 +96,8 @@ public class JiResource {
String id = dockerService.listAllContainers(); String id = dockerService.listAllContainers();
return Response.ok(id).build(); return Response.ok(id).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500).entity(Map.of("error",
e.getMessage())).build();
} }
} }
@ -96,9 +106,9 @@ public class JiResource {
public Response start(@QueryParam("id") String id) { public Response start(@QueryParam("id") String id) {
try { try {
dockerService.start(id); dockerService.start(id);
return Response.ok(Map.of("containerId", id, "status", "Running")).build(); return Response.ok(Map.of("containerId", id, "status",
} catch (Exception e) { "Running")).build(); } catch (Exception e) { return
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); Response.status(500).entity(Map.of("error", e.getMessage())).build();
} }
} }
@ -107,9 +117,9 @@ public class JiResource {
public Response stop(@QueryParam("id") String id) { public Response stop(@QueryParam("id") String id) {
try { try {
dockerService.stop(id); dockerService.stop(id);
return Response.ok(Map.of("containerId", id, "status", "removed")).build(); return Response.ok(Map.of("containerId", id, "status",
} catch (Exception e) { "removed")).build(); } catch (Exception e) { return
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); Response.status(500).entity(Map.of("error", e.getMessage())).build();
} }
} }
@DELETE @DELETE
@ -117,9 +127,9 @@ public class JiResource {
public Response remove(@QueryParam("id") String id) { public Response remove(@QueryParam("id") String id) {
try { try {
dockerService.remove(id); dockerService.remove(id);
return Response.ok(Map.of("containerId", id, "status", "removed")).build(); return Response.ok(Map.of("containerId", id, "status",
} catch (Exception e) { "removed")).build(); } catch (Exception e) { return
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); Response.status(500).entity(Map.of("error", e.getMessage())).build();
} }
}*/ }*/
} }

View File

@ -2,32 +2,28 @@ package fr.la_banquise.backend.rest;
import fr.la_banquise.backend.data.model.Site; import fr.la_banquise.backend.data.model.Site;
import fr.la_banquise.backend.services.SiteService; import fr.la_banquise.backend.services.SiteService;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.annotation.security.RolesAllowed;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.ws.rs.*; import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import io.quarkus.security.identity.SecurityIdentity;
import jakarta.annotation.security.RolesAllowed;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponses;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.Operation;
import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; import org.eclipse.microprofile.openapi.annotations.parameters.Parameter;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
import java.util.Map; import org.eclipse.microprofile.openapi.annotations.responses.APIResponses;
@Path("/sites") @Path("/sites")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
public class SiteEndpoints { public class SiteEndpoints {
@Inject @Inject SecurityIdentity identity;
SecurityIdentity identity;
@Inject @Inject SiteService siteService;
SiteService siteService;
@GET @GET
@Path("/listall") @Path("/listall")
@ -36,27 +32,29 @@ public class SiteEndpoints {
try { try {
List<Site> sites = siteService.getAllSites(); List<Site> sites = siteService.getAllSites();
return Response.ok(sites).build(); return Response.ok(sites).build();
} } catch (Exception e) {
catch (Exception e) { return Response.status(500)
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); .entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@POST @POST
@Path("/create") @Path("/create")
@RolesAllowed("root") @RolesAllowed("root")
public Response createSite(@QueryParam("name") String name, @QueryParam("desc") String desc, @QueryParam("address") String address) { public Response createSite(@QueryParam("name") String name,
@QueryParam("desc") String desc,
@QueryParam("address") String address) {
try { try {
String jsp = siteService.createSite(name, desc, address).toString(); String jsp = siteService.createSite(name, desc, address).toString();
return Response.ok(Map.of("created", jsp)).build(); return Response.ok(Map.of("created", jsp)).build();
} } catch (Exception e) {
catch (Exception e) { return Response.status(500)
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); .entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@GET @GET
@Path("/getbyname") @Path("/getbyname")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@ -64,33 +62,48 @@ public class SiteEndpoints {
try { try {
Site site = siteService.getSiteByName(name); Site site = siteService.getSiteByName(name);
return Response.ok(site.toString()).build(); return Response.ok(site.toString()).build();
} } catch (Exception e) {
catch (Exception e) { return Response.status(500)
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); .entity(Map.of("error", e.getMessage()))
.build();
} }
} }
@DELETE @DELETE
@Path("/del") @Path("/del")
@RolesAllowed("root") @RolesAllowed("root")
@Operation(summary = "Deletes a site", description = "Permanently removes a site if no Ji are associated to it.") @Operation(summary = "Deletes a site",
description =
"Permanently removes a site if no Ji are associated to it.")
@APIResponses({ @APIResponses({
@APIResponse(responseCode = "200", description = "Successfully deleted"), @APIResponse(responseCode = "200", description = "Successfully deleted")
@APIResponse(responseCode = "409", description = "Cannot delete site, it has associated JI records"), ,
@APIResponse(responseCode = "500", description = "Internal server error, usually site not found")}) @APIResponse(responseCode = "409",
public Response deleteSiteByName(@QueryParam("name") String name) { description =
"Cannot delete site, it has associated JI records")
,
@APIResponse(responseCode = "500",
description =
"Internal server error, usually site not found")
})
public Response
deleteSiteByName(@QueryParam("name") String name) {
try { try {
boolean retour = siteService.deleteSiteByName(name); boolean retour = siteService.deleteSiteByName(name);
if (retour) { return Response.ok().build(); } if (retour) {
return Response.status(409).entity(Map.of("Cannot delete site", "it has associated JI records")).build(); return Response.ok().build();
} }
catch (Exception e) { return Response.status(409)
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); .entity(Map.of("Cannot delete site",
"it has associated JI records"))
.build();
} catch (Exception e) {
return Response.status(500)
.entity(Map.of("error", e.getMessage()))
.build();
} }
} }
/* /*
@GET @GET
@Path("/all") @Path("/all")
public Response listContainers() { public Response listContainers() {
@ -98,7 +111,8 @@ public class SiteEndpoints {
String id = dockerService.listAllContainers(); String id = dockerService.listAllContainers();
return Response.ok(id).build(); return Response.ok(id).build();
} catch (Exception e) { } catch (Exception e) {
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); return Response.status(500).entity(Map.of("error",
e.getMessage())).build();
} }
} }
@ -107,9 +121,9 @@ public class SiteEndpoints {
public Response start(@QueryParam("id") String id) { public Response start(@QueryParam("id") String id) {
try { try {
dockerService.start(id); dockerService.start(id);
return Response.ok(Map.of("containerId", id, "status", "Running")).build(); return Response.ok(Map.of("containerId", id, "status",
} catch (Exception e) { "Running")).build(); } catch (Exception e) { return
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); Response.status(500).entity(Map.of("error", e.getMessage())).build();
} }
} }
@ -118,9 +132,9 @@ public class SiteEndpoints {
public Response stop(@QueryParam("id") String id) { public Response stop(@QueryParam("id") String id) {
try { try {
dockerService.stop(id); dockerService.stop(id);
return Response.ok(Map.of("containerId", id, "status", "removed")).build(); return Response.ok(Map.of("containerId", id, "status",
} catch (Exception e) { "removed")).build(); } catch (Exception e) { return
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); Response.status(500).entity(Map.of("error", e.getMessage())).build();
} }
} }
@DELETE @DELETE
@ -128,9 +142,9 @@ public class SiteEndpoints {
public Response remove(@QueryParam("id") String id) { public Response remove(@QueryParam("id") String id) {
try { try {
dockerService.remove(id); dockerService.remove(id);
return Response.ok(Map.of("containerId", id, "status", "removed")).build(); return Response.ok(Map.of("containerId", id, "status",
} catch (Exception e) { "removed")).build(); } catch (Exception e) { return
return Response.status(500).entity(Map.of("error", e.getMessage())).build(); Response.status(500).entity(Map.of("error", e.getMessage())).build();
} }
}*/ }*/
} }

View File

@ -23,16 +23,15 @@ import jakarta.ws.rs.core.Response;
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public class UserEndpoints { public class UserEndpoints {
@Inject @Inject SecurityIdentity identity;
SecurityIdentity identity;
@Inject @Inject UserService userService;
UserService userService;
@GET @GET
@Path("/me") @Path("/me")
public Response getCurrentUser() { public Response getCurrentUser() {
LoggedUserResponse user = new LoggedUserResponse(identity.getPrincipal().getName(), identity.getRoles()); LoggedUserResponse user = new LoggedUserResponse(
identity.getPrincipal().getName(), identity.getRoles());
return Response.ok(user).build(); return Response.ok(user).build();
} }

View File

@ -2,24 +2,23 @@ package fr.la_banquise.backend.services;
import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse; 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.ExposedPort;
import com.github.dockerjava.api.model.HostConfig; import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.PortBinding; import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Ports; import com.github.dockerjava.api.model.Ports;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.HashMap;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.ContainerPort;
import com.github.dockerjava.api.command.InspectContainerResponse;
@ApplicationScoped @ApplicationScoped
public class DockerService { public class DockerService {
@Inject @Inject DockerClient dockerClient;
DockerClient dockerClient;
public String createAndStartNginx() { public String createAndStartNginx() {
ExposedPort tcp80 = ExposedPort.tcp(80); ExposedPort tcp80 = ExposedPort.tcp(80);
@ -27,15 +26,16 @@ public class DockerService {
Ports portBindings = new Ports(); Ports portBindings = new Ports();
portBindings.bind(tcp80, Ports.Binding.bindPort(8081)); portBindings.bind(tcp80, Ports.Binding.bindPort(8081));
HostConfig hostConfig = HostConfig.newHostConfig() HostConfig hostConfig =
.withPortBindings(portBindings); HostConfig.newHostConfig().withPortBindings(portBindings);
Map<String, String> labels = new HashMap<>(); Map<String, String> labels = new HashMap<>();
labels.put("test", "banquise"); labels.put("test", "banquise");
labels.put("environment", "development"); labels.put("environment", "development");
labels.put("version", "1.0"); labels.put("version", "1.0");
labels.put("created-by", "java-docker-api"); labels.put("created-by", "java-docker-api");
CreateContainerResponse container = dockerClient.createContainerCmd("nginx:latest") CreateContainerResponse container =
dockerClient.createContainerCmd("nginx:latest")
.withName("my-nginx") .withName("my-nginx")
.withLabels(labels) .withLabels(labels)
.withExposedPorts(tcp80) .withExposedPorts(tcp80)
@ -53,19 +53,20 @@ public class DockerService {
Ports portBindings = new Ports(); Ports portBindings = new Ports();
portBindings.bind(tcpSsh, Ports.Binding.bindPort(port)); portBindings.bind(tcpSsh, Ports.Binding.bindPort(port));
HostConfig hostConfig = HostConfig.newHostConfig() HostConfig hostConfig =
.withPortBindings(portBindings); HostConfig.newHostConfig().withPortBindings(portBindings);
CreateContainerResponse container = dockerClient.createContainerCmd("nginx:latest") CreateContainerResponse container =
dockerClient.createContainerCmd("nginx:latest")
.withName(containerName) .withName(containerName)
.withExposedPorts(tcpSsh) .withExposedPorts(tcpSsh)
.withHostConfig(hostConfig) .withHostConfig(hostConfig)
.exec(); .exec();
//dockerClient.startContainerCmd(container.getId()).exec(); // dockerClient.startContainerCmd(container.getId()).exec();
return container.getId(); return container.getId();
} }
/* /*
public String listAllContainers() { public String listAllContainers() {
StringBuilder json = new StringBuilder(); StringBuilder json = new StringBuilder();
List<Container> containers = dockerClient.listContainersCmd() List<Container> containers = dockerClient.listContainersCmd()
@ -84,15 +85,16 @@ public class DockerService {
json.append("\"status\":\"").append(container.getStatus()).append("\","); json.append("\"status\":\"").append(container.getStatus()).append("\",");
// Ports // Ports
InspectContainerResponse inspectResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); InspectContainerResponse inspectResponse =
dockerClient.inspectContainerCmd(container.getId()).exec();
json.append("\"ports\":["); json.append("\"ports\":[");
if (container.getPorts() != null && container.getPorts().length > 0) { if (container.getPorts() != null && container.getPorts().length > 0) {
for (int j = 0; j < .length; j+=2) { for (int j = 0; j < .length; j+=2) {
ContainerPort port = container.getPorts()[j]; ContainerPort port = container.getPorts()[j];
json.append("[\""); json.append("[\"");
json.append(port.getPrivatePort()).append("->").append(port.getPublicPort()).append("/"+port.getType()+"\",\""); json.append(port.getPrivatePort()).append("->").append(port.getPublicPort()).append("/"+port.getType()+"\",\"");
json.append(port.getIp()).append(",").append((container.getPorts()[j+1]).getIp()); json.append(port.getIp()).append(",").append((container.getPorts()[j+1]).getIp());
if (port.getType() != null) { if (port.getType() != null) {
json.append("/").append(port.getType()); json.append("/").append(port.getType());
} }
if (port.getPublicPort() != null) { if (port.getPublicPort() != null) {
@ -109,14 +111,15 @@ if (port.getType() != null) {
// Ports // Ports
String ports = "[]"; String ports = "[]";
try { try {
InspectContainerResponse inspectResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); InspectContainerResponse inspectResponse =
if (inspectResponse.getConfig().getExposedPorts() != null) { dockerClient.inspectContainerCmd(container.getId()).exec(); if
ports = inspectResponse.getConfig().getExposedPorts().toString(); (inspectResponse.getConfig().getExposedPorts() != null) { ports =
inspectResponse.getConfig().getExposedPorts().toString();
} }
} catch (Exception e) { } catch (Exception e) {
// Fallback vers les ports runtime si inspect échoue // Fallback vers les ports runtime si inspect échoue
if (container.getPorts() != null && container.getPorts().length > 0) { if (container.getPorts() != null && container.getPorts().length
ports = java.util.Arrays.toString(container.getPorts()); > 0) { ports = java.util.Arrays.toString(container.getPorts());
} }
} }
json.append("\"ports\":\"").append(ports).append("\""); json.append("\"ports\":\"").append(ports).append("\"");
@ -134,7 +137,7 @@ if (port.getType() != null) {
json.append("]"); json.append("]");
return json.toString(); return json.toString();
} }
public String listAllContainers() { public String listAllContainers() {
StringBuilder json = new StringBuilder(); StringBuilder json = new StringBuilder();
List<Container> containers = dockerClient.listContainersCmd() List<Container> containers = dockerClient.listContainersCmd()
@ -146,22 +149,21 @@ if (port.getType() != null) {
// Ports // Ports
List<String> portsList = new ArrayList<>(); List<String> portsList = new ArrayList<>();
try { try {
var inspectResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); var inspectResponse =
if (inspectResponse.getConfig().getExposedPorts() != null) { dockerClient.inspectContainerCmd(container.getId()).exec(); if
var exposedPorts = inspectResponse.getConfig().getExposedPorts(); (inspectResponse.getConfig().getExposedPorts() != null) { var exposedPorts =
int count = 0; inspectResponse.getConfig().getExposedPorts(); int count = 0; for (var port
for (var port : exposedPorts) { : exposedPorts) { if (count > 0) portsList.append(",");
if (count > 0) portsList.append(","); portsList.append(String.format("\"%s\"",
portsList.append(String.format("\"%s\"", port.toString())); port.toString())); count = 1;
count = 1;
} }
portsList.append("]"); portsList.append("]");
ports = portsList.toString(); ports = portsList.toString();
} }
} catch (Exception e) { } catch (Exception e) {
// Fallback vers les ports runtime si inspect échoue // Fallback vers les ports runtime si inspect échoue
if (container.getPorts() != null && container.getPorts().length > 0) { if (container.getPorts() != null && container.getPorts().length
ports = java.util.Arrays.toString(container.getPorts()); > 0) { ports = java.util.Arrays.toString(container.getPorts());
} }
} }
@ -173,7 +175,7 @@ if (port.getType() != null) {
} }
json.append("]"); json.append("]");
return json.toString(); return json.toString();
}*/ }*/
public String listAllContainers() { return ""; } public String listAllContainers() { return ""; }
public void start(String containerId) { public void start(String containerId) {

View File

@ -11,14 +11,13 @@ import java.util.List;
@ApplicationScoped @ApplicationScoped
public class JiService { public class JiService {
@Inject @Inject JiRepository jiRepository;
JiRepository jiRepository;
@Inject @Inject SiteService siteService;
SiteService siteService;
@Transactional @Transactional
public Ji createJi(String name, String description, String address, String respo, String site_name) { public Ji createJi(String name, String description, String address,
String respo, String site_name) {
Site site = siteService.getSiteByName(site_name); Site site = siteService.getSiteByName(site_name);
Ji ji = new Ji(name, description, address, respo, site); Ji ji = new Ji(name, description, address, respo, site);
jiRepository.persist(ji); jiRepository.persist(ji);
@ -26,23 +25,13 @@ public class JiService {
return ji; return ji;
} }
/*@Transactional public List<Ji> getAllJi() { return jiRepository.listAll(); }
public List<Site> saveAllSites(List<Site> sites) {
sites.forEach(site -> siteRepository.persist(site));
return sites;
}*/
public List<Ji> getAllJi() {
return jiRepository.listAll();
}
public Ji getJiByName(String name) { public Ji getJiByName(String name) {
return jiRepository.find("name", name).firstResult(); return jiRepository.find("name", name).firstResult();
} }
public Ji getJiById(Long id) { public Ji getJiById(Long id) { return jiRepository.findById(id); }
return jiRepository.findById(id);
}
@Transactional @Transactional
public void deleteJi(Long id) { public void deleteJi(Long id) {

View File

@ -1,7 +1,7 @@
package fr.la_banquise.backend.services; package fr.la_banquise.backend.services;
import fr.la_banquise.backend.data.model.Site;
import fr.la_banquise.backend.data.model.Ji; import fr.la_banquise.backend.data.model.Ji;
import fr.la_banquise.backend.data.model.Site;
import fr.la_banquise.backend.data.repository.SiteRepository; import fr.la_banquise.backend.data.repository.SiteRepository;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject; import jakarta.inject.Inject;
@ -11,8 +11,7 @@ import java.util.List;
@ApplicationScoped @ApplicationScoped
public class SiteService { public class SiteService {
@Inject @Inject SiteRepository siteRepository;
SiteRepository siteRepository;
@Transactional @Transactional
public Site createSite(String name, String description, String address) { public Site createSite(String name, String description, String address) {
@ -27,44 +26,37 @@ public class SiteService {
return sites; return sites;
}*/ }*/
public List<Site> getAllSites() { public List<Site> getAllSites() { return siteRepository.listAll(); }
return siteRepository.listAll();
}
public Site getSiteByName(String name) { public Site getSiteByName(String name) {
return siteRepository.find("name", name).firstResult(); return siteRepository.find("name", name).firstResult();
} }
public Site getSiteById(Long id) { public Site getSiteById(Long id) { return siteRepository.findById(id); }
return siteRepository.findById(id);
}
@Transactional @Transactional
public void addJi(Site site, Ji ji){ public void addJi(Site site, Ji ji) {
site.jiInSite.add(ji); site.jiInSite.add(ji);
} }
@Transactional @Transactional
public void removeJi(Site site, Ji ji){ public void removeJi(Site site, Ji ji) {
site.jiInSite.remove(ji); site.jiInSite.remove(ji);
} }
@Transactional @Transactional
public boolean deleteSiteById(Long id) { public boolean deleteSiteById(Long id) {
if (getSiteById(id).jiInSite.isEmpty()) if (getSiteById(id).jiInSite.isEmpty()) {
{
siteRepository.deleteById(id); siteRepository.deleteById(id);
return true; return true;
} }
return false; return false;
} }
@Transactional @Transactional
public boolean deleteSiteByName(String name) { public boolean deleteSiteByName(String name) {
Site site = getSiteByName(name); Site site = getSiteByName(name);
if (site.jiInSite.isEmpty()) if (site.jiInSite.isEmpty()) {
{
siteRepository.delete(site); siteRepository.delete(site);
return true; return true;
} }

View File

@ -1,10 +1,5 @@
package fr.la_banquise.backend.services; package fr.la_banquise.backend.services;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.annotations.TypeRegistration;
import fr.la_banquise.backend.data.model.Instance; import fr.la_banquise.backend.data.model.Instance;
import fr.la_banquise.backend.data.model.User; import fr.la_banquise.backend.data.model.User;
import fr.la_banquise.backend.data.repository.UserRepository; import fr.la_banquise.backend.data.repository.UserRepository;
@ -14,6 +9,9 @@ import io.quarkus.elytron.security.common.BcryptUtil;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.annotations.TypeRegistration;
/** /**
* UserService * UserService
@ -21,23 +19,19 @@ import jakarta.transaction.Transactional;
@ApplicationScoped @ApplicationScoped
public class UserService { public class UserService {
@Inject @Inject UserRepository userRepository;
UserRepository userRepository;
@Inject @Inject InstanceService instanceService;
InstanceService instanceService;
public List<User> getAllUsers() { public List<User> getAllUsers() { return userRepository.listAll(); }
return userRepository.listAll();
}
public User getUser(Long id) { public User getUser(Long id) { return userRepository.findById(id); }
return userRepository.findById(id);
}
@Transactional @Transactional
public User createUser(UserRequest request) { public User createUser(UserRequest request) {
User user = new User(request.name, BcryptUtil.bcryptHash(request.password), "pingouin", new ArrayList<>()); User user =
new User(request.name, BcryptUtil.bcryptHash(request.password),
"pingouin", new ArrayList<>());
userRepository.persist(user); userRepository.persist(user);
return user; return user;
} }
@ -74,11 +68,10 @@ public class UserService {
for (UserRequest user : usersRequest.users) { for (UserRequest user : usersRequest.users) {
User newUser = createUser(user); User newUser = createUser(user);
users.add(newUser); users.add(newUser);
instanceService.createInstance(user.instance_name, user.instance_ssh, user.instance_pwd, user.instance_port, instanceService.createInstance(
user.name, user.instance_name, user.instance_ssh, user.instance_pwd,
usersRequest.tpId); user.instance_port, user.name, usersRequest.tpId);
} }
return new ArrayList<User>(); return new ArrayList<User>();
} }
} }