Exemples de correction
GET /grids et GET /grid/:id
package fr.imta.smartgrid.server.handlers;
import java.util.List;
import fr.imta.smartgrid.model.Grid;
import io.vertx.ext.web.RoutingContext;
import jakarta.persistence.EntityManager;
public class GridHandler {
private EntityManager db;
public GridHandler(EntityManager db) {
this.db = db;
}
public void getGrids(RoutingContext ctx) {
@SuppressWarnings("unchecked")
List<Integer> grids = db.createNativeQuery("SELECT g.id from grid as g").getResultList();
ctx.json(grids);
}
public void getById(RoutingContext ctx) {
Grid g = db.find(Grid.class, Integer.parseInt(ctx.pathParam("id")));
if (g == null) {
ctx.fail(404);
} else {
ctx.json(g.toJSON());
}
}
}
GET /persons et GET /person/:id
package fr.imta.smartgrid.server.handlers;
import java.util.List;
import fr.imta.smartgrid.model.Person;
import io.vertx.ext.web.RoutingContext;
import jakarta.persistence.EntityManager;
public class PersonHandler {
private EntityManager db;
public PersonHandler(EntityManager db) {
this.db = db;
}
public void getPersons(RoutingContext ctx) {
List<Integer> personIds = db.createNativeQuery("SELECT p.id from person as p").getResultList();
ctx.json(personIds);
}
public void getById(RoutingContext ctx) {
Person person = db.find(Person.class, Integer.parseInt(ctx.pathParam("id")));
if (person == null) {
ctx.fail(404);
} else {
ctx.json(person.toJSON());
}
}
}
classe Grid
package fr.imta.smartgrid.model;
import java.util.ArrayList;
import java.util.List;
import io.vertx.core.json.JsonObject;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
@Entity
@Table(name = "grid")
public class Grid {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String description;
@OneToMany(mappedBy = "grid")
private List<Person> persons = new ArrayList<>();
@OneToMany(mappedBy = "grid")
private List<Sensor> sensors = new ArrayList<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
public List<Sensor> getSensors() {
return sensors;
}
public void setSensors(List<Sensor> sensors) {
this.sensors = sensors;
}
public JsonObject toJSON() {
JsonObject res = new JsonObject();
res.put("id", this.id);
res.put("name", this.name);
res.put("description", this.description);
List<Integer> personIds = new ArrayList<>();
for (Person p : this.persons) {
personIds.add(p.getId());
}
res.put("users", personIds);
List<Integer> sensorIds = new ArrayList<>();
for (Sensor s : this.sensors) {
sensorIds.add(s.getId());
}
res.put("sensors", sensorIds);
return res;
}
}
classe Person
package fr.imta.smartgrid.model;
import java.util.ArrayList;
import java.util.List;
import io.vertx.core.json.JsonObject;
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.ManyToOne;
import jakarta.persistence.Table;
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String firstName;
private String lastName;
@ManyToOne
@JoinColumn(name = "grid")
private Grid grid;
@ManyToMany
@JoinTable(
name = "person_sensor", joinColumns = @JoinColumn(name = "person_id"), inverseJoinColumns = @JoinColumn(name = "sensor_id"))
private List<Sensor> sensors = new ArrayList<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Grid getGrid() {
return grid;
}
public void setGrid(Grid grid) {
this.grid = grid;
}
public List<Sensor> getSensors() {
return sensors;
}
public void setSensors(List<Sensor> sensors) {
this.sensors = sensors;
}
public JsonObject toJSON() {
JsonObject response = new JsonObject();
response.put("id", this.id);
response.put("first_name", this.firstName);
response.put("last_name", this.lastName);
response.put("grid", this.grid.getId());
List<Integer> ownedSensors = new ArrayList<>();
for (Sensor s : this.sensors) {
ownedSensors.add(s.getId());
}
response.put("owned_sensors", ownedSensors);
return response;
}
}