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