From afb6b8c73ee45e6b4f334692f49bb2d2f20d88b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 12:32:30 +0100 Subject: [PATCH 01/17] =?UTF-8?q?Feat:=20Ajout=20des=20premi=C3=A8res=20cl?= =?UTF-8?q?asses=20JPA=20(Session=20et=20Activite=20compl=C3=A8tes,=20pas?= =?UTF-8?q?=20les=20autres)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 + back_end/pom.xml | 10 +++- .../java/hackathon/FrisbYEE/jpa/Activite.java | 53 +++++++++++++++++ .../java/hackathon/FrisbYEE/jpa/Athlete.java | 28 +++++++++ .../java/hackathon/FrisbYEE/jpa/Coach.java | 28 +++++++++ .../java/hackathon/FrisbYEE/jpa/Session.java | 59 +++++++++++++++++++ 6 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c5f3f6b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/back_end/pom.xml b/back_end/pom.xml index 54df3f5..e8bf001 100644 --- a/back_end/pom.xml +++ b/back_end/pom.xml @@ -28,7 +28,7 @@ - 25 + 17 @@ -97,7 +97,13 @@ spring-boot-starter-thymeleaf-test test - + + org.projectlombok + lombok + 1.18.32 + provided + + diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java new file mode 100644 index 0000000..8b7343c --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java @@ -0,0 +1,53 @@ +package hackathon.FrisbYEE.jpa; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import jakarta.persistence.Access; +import jakarta.persistence.AccessType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; + +@Entity +@Getter @Setter @NoArgsConstructor +@Access(AccessType.FIELD) + +public class Activite implements Serializable { + + @Id + @GeneratedValue + private Long id; + private String name; + private String theme; + private Long duree; + @ElementCollection + private List dataActivite = new ArrayList<>(); + + @ManyToOne(cascade = CascadeType.PERSIST) + private Session session; + + public Activite(String name) { + this.name = name; + } + + public Activite(String name, String theme, List dataActivite, Long duree) { + this.name = name; + this.theme = theme; + this.duree = duree; + this.dataActivite = dataActivite; + } + + @Override + public String toString() { + return "Activite [id=" + id + " , name=" + name + "]"; + } + +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java new file mode 100644 index 0000000..73e4ece --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java @@ -0,0 +1,28 @@ +package hackathon.FrisbYEE.jpa; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import jakarta.persistence.Access; +import jakarta.persistence.AccessType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; + +@Entity +@Getter @Setter @NoArgsConstructor +@Access(AccessType.FIELD) +public class Athlete { + + +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java new file mode 100644 index 0000000..99287fc --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java @@ -0,0 +1,28 @@ +package hackathon.FrisbYEE.jpa; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import jakarta.persistence.Access; +import jakarta.persistence.AccessType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; + +@Entity +@Getter @Setter @NoArgsConstructor +@Access(AccessType.FIELD) +public class Coach { + + +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java new file mode 100644 index 0000000..d77c880 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java @@ -0,0 +1,59 @@ +package hackathon.FrisbYEE.jpa; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import jakarta.persistence.Access; +import jakarta.persistence.AccessType; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; + +@Entity +@Getter @Setter @NoArgsConstructor +@Access(AccessType.FIELD) + +public class Session { + + @Id + @GeneratedValue + private Long id; + private String name; + private Boolean isRecurrent; + private LocalDateTime creneau; + private Long duree; + private String groupe; + + @ManyToOne(cascade = CascadeType.PERSIST) + private Coach coach; // un coach par session + + @ManyToMany(cascade = CascadeType.PERSIST) + private List athletes = new ArrayList<>(); // plusieurs athlètes par session + + @OneToMany(mappedBy = "session", cascade = CascadeType.PERSIST) + private List activites = new ArrayList<>(); // plusieurs activités par session + + public Session(String name) { + this.name = name; + } + + public Session(String name, Boolean isRecurrent, LocalDateTime creneau, Long duree, String groupe) { + this.name = name; + this.isRecurrent = isRecurrent; + this.creneau = creneau; + this.duree = duree; + this.groupe = groupe; + } + + @Override + public String toString() { + return "Session [id=" + id + " , name=" + name + "]"; + } +} \ No newline at end of file From d4a570f6306c118a18cff1e120556815bf71d435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 12:48:20 +0100 Subject: [PATCH 02/17] Feat: fin des classes Athlete , Coach et Admin --- .../java/hackathon/FrisbYEE/jpa/Admin.java | 30 +++++++++++++++++++ .../java/hackathon/FrisbYEE/jpa/Athlete.java | 24 ++++++++++----- .../java/hackathon/FrisbYEE/jpa/Coach.java | 23 +++++++++----- 3 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java new file mode 100644 index 0000000..fdb77fe --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java @@ -0,0 +1,30 @@ +package hackathon.FrisbYEE.jpa; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import jakarta.persistence.Access; +import jakarta.persistence.AccessType; +import jakarta.persistence.Entity; + +@Entity +@Getter @Setter @NoArgsConstructor +@Access(AccessType.FIELD) + +public class Admin { + + @Id + @GeneratedValue + private Long id; + private String name; + + public Admin(String name){ + this.name = name; + } + @Override + public String toString() { + return "Admin [id=" + id + " , name=" + name + "]"; + } +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java index 73e4ece..fd5b2ac 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java @@ -3,26 +3,34 @@ package hackathon.FrisbYEE.jpa; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - -import java.time.LocalDateTime; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import jakarta.persistence.Access; import jakarta.persistence.AccessType; -import jakarta.persistence.CascadeType; -import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @Entity @Getter @Setter @NoArgsConstructor @Access(AccessType.FIELD) + public class Athlete { - + @Id + @GeneratedValue + private Long id; + private String name; + + @ManyToMany(mappedBy = "athletes") + private List sessions = new ArrayList<>(); // plusieurs sessions sont possibles + + public Athlete(String name){ + this.name = name; + } + @Override + public String toString() { + return "Athlete [id=" + id + " , name=" + name + "]"; + } } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java index 99287fc..ed820b2 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java @@ -2,27 +2,36 @@ package hackathon.FrisbYEE.jpa; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - -import java.time.LocalDateTime; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import jakarta.persistence.Access; import jakarta.persistence.AccessType; import jakarta.persistence.CascadeType; -import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @Entity @Getter @Setter @NoArgsConstructor @Access(AccessType.FIELD) + public class Coach { - + @Id + @GeneratedValue + private Long id; + private String name; + + @OneToMany(mappedBy = "session", cascade = CascadeType.PERSIST) + private List sessions = new ArrayList<>(); // Un coach peut avoir plusieurs sessions + + public Coach(String name){ + this.name = name; + } + @Override + public String toString() { + return "Coach [id=" + id + " , name=" + name + "]"; + } } From 459dd124992fa3c65d801ae7d0c9ff63a9dfb52f Mon Sep 17 00:00:00 2001 From: tuanvu Date: Mon, 5 Jan 2026 12:56:45 +0100 Subject: [PATCH 03/17] ajout un dossier --- .../main/java/hackathon/FrisbYEE/jpa/{ => metier}/Activite.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/{ => metier}/Admin.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/{ => metier}/Athlete.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/{ => metier}/Coach.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/{ => metier}/Session.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename back_end/src/main/java/hackathon/FrisbYEE/jpa/{ => metier}/Activite.java (97%) rename back_end/src/main/java/hackathon/FrisbYEE/jpa/{ => metier}/Admin.java (93%) rename back_end/src/main/java/hackathon/FrisbYEE/jpa/{ => metier}/Athlete.java (95%) rename back_end/src/main/java/hackathon/FrisbYEE/jpa/{ => metier}/Coach.java (95%) rename back_end/src/main/java/hackathon/FrisbYEE/jpa/{ => metier}/Session.java (97%) diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java similarity index 97% rename from back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java rename to back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java index 8b7343c..62861a1 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Activite.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java @@ -1,4 +1,4 @@ -package hackathon.FrisbYEE.jpa; +package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java similarity index 93% rename from back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java rename to back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java index fdb77fe..ddacacc 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Admin.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java @@ -1,4 +1,4 @@ -package hackathon.FrisbYEE.jpa; +package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java similarity index 95% rename from back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java rename to back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java index fd5b2ac..c3bc63b 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Athlete.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java @@ -1,4 +1,4 @@ -package hackathon.FrisbYEE.jpa; +package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java similarity index 95% rename from back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java rename to back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java index ed820b2..ab28248 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Coach.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java @@ -1,4 +1,4 @@ -package hackathon.FrisbYEE.jpa; +package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java similarity index 97% rename from back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java rename to back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java index d77c880..c4f0e4d 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/Session.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java @@ -1,4 +1,4 @@ -package hackathon.FrisbYEE.jpa; +package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; From 383039a6795039e7115c44939d992a76c58aae58 Mon Sep 17 00:00:00 2001 From: tuanvu Date: Mon, 5 Jan 2026 13:06:41 +0100 Subject: [PATCH 04/17] DAO vs controller --- .../hackathon/FrisbYEE/jpa/service/ActiviteDAO.java | 8 ++++++++ .../hackathon/FrisbYEE/jpa/service/AthleteDAO.java | 9 +++++++++ .../java/hackathon/FrisbYEE/jpa/service/CoachDAO.java | 4 ++++ .../FrisbYEE/jpa/web/ActiviteController.java | 11 +++++++++++ 4 files changed, 32 insertions(+) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java new file mode 100644 index 0000000..b238e75 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java @@ -0,0 +1,8 @@ +package hackathon.FrisbYEE.jpa.service; + +import hackathon.FrisbYEE.jpa.metier.Activite; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ActiviteDAO extends JpaRepository { + Activite findByKeycloakId(String keycloakId); +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java new file mode 100644 index 0000000..9a352a3 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java @@ -0,0 +1,9 @@ +package hackathon.FrisbYEE.jpa.service; + +import hackathon.FrisbYEE.jpa.metier.Activite; +import hackathon.FrisbYEE.jpa.metier.Athlete; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AthleteDAO extends JpaRepository { +} + diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java new file mode 100644 index 0000000..fe16ff9 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java @@ -0,0 +1,4 @@ +package hackathon.FrisbYEE.jpa.service; + +public class CoachDAO { +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java new file mode 100644 index 0000000..9557bef --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java @@ -0,0 +1,11 @@ +package hackathon.FrisbYEE.jpa.web; + + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/activite") + +public class ActiviteController { +} From 995753d026045c5bb01b950d6288820e9395f8f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 13:08:16 +0100 Subject: [PATCH 05/17] Feat: Fin de la partie JPA ( a voir si on mets une table User) --- .../hackathon/FrisbYEE/jpa/metier/Activite.java | 4 +--- .../hackathon/FrisbYEE/jpa/metier/Athlete.java | 14 ++++++++++++++ .../java/hackathon/FrisbYEE/jpa/metier/Coach.java | 5 ++--- .../hackathon/FrisbYEE/jpa/metier/Session.java | 4 ++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java index 62861a1..a0d84e0 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java @@ -6,13 +6,11 @@ import jakarta.persistence.ManyToOne; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; import jakarta.persistence.Access; import jakarta.persistence.AccessType; -import jakarta.persistence.CascadeType; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @@ -31,7 +29,7 @@ public class Activite implements Serializable { @ElementCollection private List dataActivite = new ArrayList<>(); - @ManyToOne(cascade = CascadeType.PERSIST) + @ManyToOne private Session session; public Activite(String name) { diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java index c3bc63b..42235e4 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.List; import jakarta.persistence.Access; import jakarta.persistence.AccessType; +import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @Entity @@ -22,13 +23,26 @@ public class Athlete { @GeneratedValue private Long id; private String name; + private String categorie; + private String niveau; + @ElementCollection + private List groupe = new ArrayList<>(); + @ManyToMany(mappedBy = "athletes") private List sessions = new ArrayList<>(); // plusieurs sessions sont possibles public Athlete(String name){ this.name = name; } + + public Athlete(String name, String categorie, String niveau, List groupe){ + this.name = name; + this.categorie = categorie; + this.niveau = niveau; + this.groupe = groupe; + } + @Override public String toString() { return "Athlete [id=" + id + " , name=" + name + "]"; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java index ab28248..6294ab9 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java @@ -10,7 +10,6 @@ import java.util.ArrayList; import java.util.List; import jakarta.persistence.Access; import jakarta.persistence.AccessType; -import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; @Entity @@ -24,7 +23,7 @@ public class Coach { private Long id; private String name; - @OneToMany(mappedBy = "session", cascade = CascadeType.PERSIST) + @OneToMany(mappedBy = "coach") private List sessions = new ArrayList<>(); // Un coach peut avoir plusieurs sessions public Coach(String name){ @@ -34,4 +33,4 @@ public class Coach { public String toString() { return "Coach [id=" + id + " , name=" + name + "]"; } -} +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java index c4f0e4d..f7d565e 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java @@ -31,10 +31,10 @@ public class Session { private Long duree; private String groupe; - @ManyToOne(cascade = CascadeType.PERSIST) + @ManyToOne private Coach coach; // un coach par session - @ManyToMany(cascade = CascadeType.PERSIST) + @ManyToMany private List athletes = new ArrayList<>(); // plusieurs athlètes par session @OneToMany(mappedBy = "session", cascade = CascadeType.PERSIST) From 94dbc95437c18419e01f9137dd1a14c6ad6d7c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 13:25:21 +0100 Subject: [PATCH 06/17] Feat: fin de JPA --- .../hackathon/FrisbYEE/jpa/metier/Admin.java | 4 ++ .../FrisbYEE/jpa/metier/Athlete.java | 4 ++ .../hackathon/FrisbYEE/jpa/metier/Coach.java | 4 ++ .../hackathon/FrisbYEE/jpa/metier/Role.java | 7 +++ .../hackathon/FrisbYEE/jpa/metier/User.java | 61 +++++++++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Role.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java index ddacacc..6bc012f 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java @@ -2,6 +2,7 @@ package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import jakarta.persistence.OneToOne; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -20,6 +21,9 @@ public class Admin { private Long id; private String name; + @OneToOne(mappedBy = "admin") + private User user; + public Admin(String name){ this.name = name; } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java index 42235e4..3ca7460 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java @@ -3,6 +3,7 @@ package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToMany; +import jakarta.persistence.OneToOne; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -32,6 +33,9 @@ public class Athlete { @ManyToMany(mappedBy = "athletes") private List sessions = new ArrayList<>(); // plusieurs sessions sont possibles + @OneToOne(mappedBy = "athlete") + private User user; + public Athlete(String name){ this.name = name; } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java index 6294ab9..ed8f2bd 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java @@ -3,6 +3,7 @@ package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -26,6 +27,9 @@ public class Coach { @OneToMany(mappedBy = "coach") private List sessions = new ArrayList<>(); // Un coach peut avoir plusieurs sessions + @OneToOne(mappedBy = "coach") + private User user; + public Coach(String name){ this.name = name; } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Role.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Role.java new file mode 100644 index 0000000..dbdc97e --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Role.java @@ -0,0 +1,7 @@ +package hackathon.FrisbYEE.jpa.metier; + +public enum Role { + ADMIN, + COACH, + ATHLETE +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java new file mode 100644 index 0000000..2141d66 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java @@ -0,0 +1,61 @@ +package hackathon.FrisbYEE.jpa.metier; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.OneToOne; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import java.io.Serializable; +import jakarta.persistence.Access; +import jakarta.persistence.AccessType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.CascadeType; + +@Entity +@Getter @Setter @NoArgsConstructor +@Access(AccessType.FIELD) + +public class User implements Serializable { + + @Id + @GeneratedValue + private Long id; + @Column(unique = true, nullable = false) //pas possible d'avoir le même nom + private String name; + @Column (nullable = false) + private String motDePasse; + private String email; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private Role role; + + @OneToOne(cascade = CascadeType.ALL) + private Coach coach; + + @OneToOne(cascade = CascadeType.ALL) + private Athlete athlete; + + @OneToOne(cascade = CascadeType.ALL) + private Admin admin; + + public User(String name) { + this.name = name; + } + + public User(String name, String motDePasse, String email, Role role) { + this.name = name; + this.motDePasse = motDePasse; + this.email = email; + this.role = role; + } + + @Override + public String toString() { + return "User [id=" + id + " , name=" + name + "]"; + } +} From fddfe32984c5937edb35d0babacff76c3b2140eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 13:53:52 +0100 Subject: [PATCH 07/17] =?UTF-8?q?Feat=20:=20Ajout=20de=20certaines=20DAO?= =?UTF-8?q?=20+=20Correction=20du=20type=20des=20ID=20dans=20les=20classes?= =?UTF-8?q?=20m=C3=A9tiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/hackathon/FrisbYEE/jpa/metier/Activite.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/metier/Admin.java | 2 +- .../java/hackathon/FrisbYEE/jpa/metier/Athlete.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/metier/Coach.java | 2 +- .../java/hackathon/FrisbYEE/jpa/metier/Session.java | 2 +- .../main/java/hackathon/FrisbYEE/jpa/metier/User.java | 2 +- .../hackathon/FrisbYEE/jpa/service/ActiviteDAO.java | 4 +++- .../java/hackathon/FrisbYEE/jpa/service/AdminDAO.java | 10 ++++++++++ .../hackathon/FrisbYEE/jpa/service/AthleteDAO.java | 6 +++--- .../java/hackathon/FrisbYEE/jpa/service/CoachDAO.java | 10 ++++++++-- .../hackathon/FrisbYEE/jpa/service/SessionDAO.java | 10 ++++++++++ 11 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AdminDAO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/service/SessionDAO.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java index a0d84e0..30f2b93 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java @@ -22,7 +22,7 @@ public class Activite implements Serializable { @Id @GeneratedValue - private Long id; + private Integer id; private String name; private String theme; private Long duree; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java index 6bc012f..69bcd52 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Admin.java @@ -18,7 +18,7 @@ public class Admin { @Id @GeneratedValue - private Long id; + private Integer id; private String name; @OneToOne(mappedBy = "admin") diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java index 3ca7460..9c6aa24 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java @@ -22,7 +22,7 @@ public class Athlete { @Id @GeneratedValue - private Long id; + private Integer id; private String name; private String categorie; private String niveau; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java index ed8f2bd..7a11fb5 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Coach.java @@ -21,7 +21,7 @@ public class Coach { @Id @GeneratedValue - private Long id; + private Integer id; private String name; @OneToMany(mappedBy = "coach") diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java index f7d565e..51b75d2 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Session.java @@ -24,7 +24,7 @@ public class Session { @Id @GeneratedValue - private Long id; + private Integer id; private String name; private Boolean isRecurrent; private LocalDateTime creneau; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java index 2141d66..00eb7b0 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/User.java @@ -23,7 +23,7 @@ public class User implements Serializable { @Id @GeneratedValue - private Long id; + private Integer id; @Column(unique = true, nullable = false) //pas possible d'avoir le même nom private String name; @Column (nullable = false) diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java index b238e75..94d3e0a 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/ActiviteDAO.java @@ -2,7 +2,9 @@ package hackathon.FrisbYEE.jpa.service; import hackathon.FrisbYEE.jpa.metier.Activite; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface ActiviteDAO extends JpaRepository { - Activite findByKeycloakId(String keycloakId); + } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AdminDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AdminDAO.java new file mode 100644 index 0000000..273dccb --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AdminDAO.java @@ -0,0 +1,10 @@ +package hackathon.FrisbYEE.jpa.service; + +import hackathon.FrisbYEE.jpa.metier.Admin; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AdminDAO extends JpaRepository { + +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java index 9a352a3..3782f74 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java @@ -1,9 +1,9 @@ package hackathon.FrisbYEE.jpa.service; -import hackathon.FrisbYEE.jpa.metier.Activite; import hackathon.FrisbYEE.jpa.metier.Athlete; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface AthleteDAO extends JpaRepository { -} - +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java index fe16ff9..8c4266b 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/CoachDAO.java @@ -1,4 +1,10 @@ package hackathon.FrisbYEE.jpa.service; -public class CoachDAO { -} +import hackathon.FrisbYEE.jpa.metier.Coach; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CoachDAO extends JpaRepository { + +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/SessionDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/SessionDAO.java new file mode 100644 index 0000000..9a68a26 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/SessionDAO.java @@ -0,0 +1,10 @@ +package hackathon.FrisbYEE.jpa.service; + +import hackathon.FrisbYEE.jpa.metier.Session; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface SessionDAO extends JpaRepository { + +} From d17fee3ee9a3e17ca5186f83b6d3898d896d060a Mon Sep 17 00:00:00 2001 From: tuanvu Date: Mon, 5 Jan 2026 14:05:41 +0100 Subject: [PATCH 08/17] test controller --- .../FrisbYEE/jpa/metier/Activite.java | 5 +-- .../FrisbYEE/jpa/web/ActiviteController.java | 42 ++++++++++++++++++- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java index a0d84e0..6c3841f 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Activite.java @@ -3,9 +3,8 @@ package hackathon.FrisbYEE.jpa.metier; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; + import java.io.Serializable; import java.util.ArrayList; import java.util.List; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java index 9557bef..5882e4f 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java @@ -1,11 +1,51 @@ package hackathon.FrisbYEE.jpa.web; +import hackathon.FrisbYEE.jpa.metier.Activite; +import hackathon.FrisbYEE.jpa.service.ActiviteDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; @Controller @RequestMapping("/activite") public class ActiviteController { + @Autowired + private ActiviteDAO activiteDAO; + + /* + POST /activite/create + DELETE /activite/delete/{id} + + */ + + @PostMapping("/create") + @ResponseBody + @PreAuthorize("hasRole('Coach')") + public String create(@PathVariable("id") int id) { + String activiteID = ""; + String activiteNom = ""; + try { + Activite activite = new Activite(); + + } catch (Exception ex) { + return ex.toString(); + } + return "ok"; + } + + @DeleteMapping("/delete/{id}") + @ResponseBody + @PreAuthorize("hasRole('Coach')") + public String delete(@PathVariable("id") int id) { + try { + Activite activite = activiteDAO.findById(id).get(); + activiteDAO.delete(activite); + } catch (Exception ex) { + return ex.toString(); + } + return "ok"; + } } From cbb4ce34817c0c8fcf3b364008a8ba42cb3944c0 Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Mon, 5 Jan 2026 14:08:16 +0100 Subject: [PATCH 09/17] First DTO --- back_end/pom.xml | 6 ++++ .../FrisbYEE/jpa/dto/AthleteDTO.java | 12 +++++++ .../FrisbYEE/rest/AthleteResource.java | 33 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java diff --git a/back_end/pom.xml b/back_end/pom.xml index e8bf001..a2c98b2 100644 --- a/back_end/pom.xml +++ b/back_end/pom.xml @@ -103,6 +103,12 @@ 1.18.32 provided + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.5.0 + + diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java new file mode 100644 index 0000000..3e8421a --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java @@ -0,0 +1,12 @@ +package hackathon.FrisbYEE.jpa.dto; + +import java.util.List; + +public class AthleteDTO implements java.io.Serializable { + + private String nom; + private String niveau; + private String categorie; + private List groupes; + +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java new file mode 100644 index 0000000..9b8b1cb --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -0,0 +1,33 @@ +package hackathon.FrisbYEE.rest; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import hackathon.FrisbYEE.jpa.service.AthleteDAO; + +public class AthleteResource { + + private AthleteDAO athleteDAO; + + @Operation(summary = "Récupère tous les utilisateurs") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Récupère le Joueur ayant l'identifiant correspondant", + content = @Content(mediaType = "application/json", + schema = @Schema(implementation = JoueurDTO.class))) + }) + @GetMapping("/joueur/{id}") + public JoueurDTO getJoueurById(@PathVariable Integer joueurId) { + // return pet + System.out.println("ID A CHERCHER" + joueurId); + IJoueur j = dao.findOne(joueurId); + JoueurDTO jDTO = new JoueurDTO(null, null); + System.out.println(j); + return jDTO; + } + +} From c6f8e552eba66f89ef40d43f6eaf56a164cdfaf5 Mon Sep 17 00:00:00 2001 From: tuanvu Date: Mon, 5 Jan 2026 15:22:22 +0100 Subject: [PATCH 10/17] DTO and Resource test --- .gitignore | 3 +- .vscode/settings.json | 3 - .../FrisbYEE/jpa/dto/ActiviteDTO.java | 52 ++++++++++++++++ .../FrisbYEE/jpa/dto/AthleteDTO.java | 2 +- .../FrisbYEE/rest/ActiviteResource.java | 61 +++++++++++++++++++ .../FrisbYEE/rest/ActiviteResources.java | 5 -- .../SessionResource.java} | 26 +++----- 7 files changed, 126 insertions(+), 26 deletions(-) delete mode 100644 .vscode/settings.json create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java delete mode 100644 back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResources.java rename back_end/src/main/java/hackathon/FrisbYEE/{jpa/web/ActiviteController.java => rest/SessionResource.java} (67%) diff --git a/.gitignore b/.gitignore index 4d29575..888b7e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - +.vscode +.idea # dependencies /node_modules /.pnp diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index c5f3f6b..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "interactive" -} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java new file mode 100644 index 0000000..82fd737 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java @@ -0,0 +1,52 @@ +package hackathon.FrisbYEE.jpa.dto; + +import java.util.List; + +public class ActiviteDTO { + private String name; + private String theme; + private Long duree; // optional, can be null + private List dataActivite; + private Integer sessionId; + + // Getters and Setters + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTheme() { + return theme; + } + + public void setTheme(String theme) { + this.theme = theme; + } + + public Long getDuree() { + return duree; + } + + public void setDuree(Long duree) { + this.duree = duree; + } + + public List getDataActivite() { + return dataActivite; + } + + public void setDataActivite(List dataActivite) { + this.dataActivite = dataActivite; + } + + public Integer getSessionId() { + return sessionId; + } + + public void setSessionId(Integer sessionId) { + this.sessionId = sessionId; + } +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java index 3e8421a..997da42 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java @@ -2,7 +2,7 @@ package hackathon.FrisbYEE.jpa.dto; import java.util.List; -public class AthleteDTO implements java.io.Serializable { +public class AthleteDTO { private String nom; private String niveau; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java new file mode 100644 index 0000000..6a02fc9 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java @@ -0,0 +1,61 @@ +package hackathon.FrisbYEE.rest; + +import hackathon.FrisbYEE.jpa.dto.ActiviteDTO; +import hackathon.FrisbYEE.jpa.metier.Activite; +import hackathon.FrisbYEE.jpa.metier.Session; +import hackathon.FrisbYEE.jpa.service.ActiviteDAO; +import hackathon.FrisbYEE.jpa.service.SessionDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +@Controller +@RequestMapping("/activite") + +public class ActiviteResource { + @Autowired + private ActiviteDAO activiteDAO; + + @Autowired + private SessionDAO sessionDAO; + + /* + POST /activite/create + DELETE /activite/delete/{id} + + */ + + @PostMapping("/create") + @ResponseBody + @PreAuthorize("hasRole('Coach')") + public String create(@RequestBody ActiviteDTO dto) { + + try { + Session session = sessionDAO.findById(dto.getSessionId()).get(); + Activite activite = new Activite(); + activite.setName(dto.getName()); + activite.setTheme(dto.getTheme()); + activite.setDuree(dto.getDuree() != null ? dto.getDuree() : 0L); + activite.setDataActivite(dto.getDataActivite()); + activite.setSession(session); + activiteDAO.save(activite); + } catch (Exception ex) { + return ex.toString(); + } + return "ok"; + } + + @DeleteMapping("/delete/{id}") + @ResponseBody + @PreAuthorize("hasRole('Coach')") + public String delete(@PathVariable("id") int id) { + try { + Activite activite = activiteDAO.findById(id).get(); + activiteDAO.delete(activite); + } catch (Exception ex) { + return ex.toString(); + } + return "ok"; + } +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResources.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResources.java deleted file mode 100644 index 405ed1c..0000000 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResources.java +++ /dev/null @@ -1,5 +0,0 @@ -package hackathon.FrisbYEE.rest; - -public class ActiviteResources { - -} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java similarity index 67% rename from back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java rename to back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java index 5882e4f..e9733ed 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/web/ActiviteController.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java @@ -1,34 +1,28 @@ -package hackathon.FrisbYEE.jpa.web; - +package hackathon.FrisbYEE.rest; import hackathon.FrisbYEE.jpa.metier.Activite; +import hackathon.FrisbYEE.jpa.metier.Session; import hackathon.FrisbYEE.jpa.service.ActiviteDAO; +import hackathon.FrisbYEE.jpa.service.SessionDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Controller -@RequestMapping("/activite") +@RequestMapping("/session") -public class ActiviteController { +public class SessionResource { @Autowired - private ActiviteDAO activiteDAO; - - /* - POST /activite/create - DELETE /activite/delete/{id} - - */ + private SessionDAO sessionDAO; @PostMapping("/create") @ResponseBody @PreAuthorize("hasRole('Coach')") public String create(@PathVariable("id") int id) { - String activiteID = ""; - String activiteNom = ""; + String sessionID = ""; try { - Activite activite = new Activite(); + Session session = new Session(); } catch (Exception ex) { return ex.toString(); @@ -41,8 +35,8 @@ public class ActiviteController { @PreAuthorize("hasRole('Coach')") public String delete(@PathVariable("id") int id) { try { - Activite activite = activiteDAO.findById(id).get(); - activiteDAO.delete(activite); + Session session = sessionDAO.findById(id).get(); + sessionDAO.delete(session); } catch (Exception ex) { return ex.toString(); } From f4b669809019baadd51a82abffb49d1a826c086a Mon Sep 17 00:00:00 2001 From: tuanvu Date: Mon, 5 Jan 2026 15:51:03 +0100 Subject: [PATCH 11/17] sessionDTO --- .../FrisbYEE/jpa/dto/ActiviteDTO.java | 43 +--------- .../FrisbYEE/jpa/dto/SessionDTO.java | 26 ++++++ .../FrisbYEE/rest/SessionResource.java | 81 ++++++++++++++++++- 3 files changed, 107 insertions(+), 43 deletions(-) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java index 82fd737..0b5316e 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java @@ -1,7 +1,10 @@ package hackathon.FrisbYEE.jpa.dto; +import lombok.Data; + import java.util.List; +@Data public class ActiviteDTO { private String name; private String theme; @@ -9,44 +12,4 @@ public class ActiviteDTO { private List dataActivite; private Integer sessionId; - // Getters and Setters - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getTheme() { - return theme; - } - - public void setTheme(String theme) { - this.theme = theme; - } - - public Long getDuree() { - return duree; - } - - public void setDuree(Long duree) { - this.duree = duree; - } - - public List getDataActivite() { - return dataActivite; - } - - public void setDataActivite(List dataActivite) { - this.dataActivite = dataActivite; - } - - public Integer getSessionId() { - return sessionId; - } - - public void setSessionId(Integer sessionId) { - this.sessionId = sessionId; - } } \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java new file mode 100644 index 0000000..be27f38 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java @@ -0,0 +1,26 @@ +package hackathon.FrisbYEE.jpa.dto; + +import hackathon.FrisbYEE.jpa.metier.Activite; +import hackathon.FrisbYEE.jpa.metier.Athlete; +import hackathon.FrisbYEE.jpa.metier.Session; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +public class SessionDTO { + + private Integer id; + private String name; + private Boolean isRecurrent; + private LocalDateTime creneau; + private Long duree; + private String groupe; + + private Integer coachId; + private List athleteIds; + private List activiteIds; + +} \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java index e9733ed..a55de28 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java @@ -1,14 +1,23 @@ package hackathon.FrisbYEE.rest; +import hackathon.FrisbYEE.jpa.dto.SessionDTO; import hackathon.FrisbYEE.jpa.metier.Activite; +import hackathon.FrisbYEE.jpa.metier.Athlete; +import hackathon.FrisbYEE.jpa.metier.Coach; import hackathon.FrisbYEE.jpa.metier.Session; import hackathon.FrisbYEE.jpa.service.ActiviteDAO; +import hackathon.FrisbYEE.jpa.service.AthleteDAO; +import hackathon.FrisbYEE.jpa.service.CoachDAO; import hackathon.FrisbYEE.jpa.service.SessionDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + @Controller @RequestMapping("/session") @@ -16,20 +25,55 @@ public class SessionResource { @Autowired private SessionDAO sessionDAO; + @Autowired + private CoachDAO coachDAO; + + @Autowired + private AthleteDAO athleteDAO; + @PostMapping("/create") @ResponseBody @PreAuthorize("hasRole('Coach')") - public String create(@PathVariable("id") int id) { - String sessionID = ""; + public String create(@RequestBody SessionDTO dto) { try { + List athletes = athleteDAO.findAllById(dto.getAthleteIds()); + Coach coach = coachDAO.findById(dto.getCoachId()).get(); Session session = new Session(); - + session.setName(dto.getName()); + session.setIsRecurrent(dto.getIsRecurrent()); + session.setCreneau(dto.getCreneau()); + session.setDuree(dto.getDuree()); + session.setGroupe(dto.getGroupe()); + session.setCoach(coach); + session.setAthletes(athletes); } catch (Exception ex) { return ex.toString(); } return "ok"; } + @GetMapping("/all") + @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") + public List getAll() { + List sessions = sessionDAO.findAll(); + List dtos = new ArrayList<>(); + for (Session session : sessions) { + dtos.add(maptoDTO(session)); + } + return dtos; + } + + @GetMapping("/{id}") + @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") + public SessionDTO getById(@PathVariable Integer id) { + try { + Session session = sessionDAO.findById(id).orElseThrow(); + return maptoDTO(session); + } catch (Exception ex) { + throw new RuntimeException("Session not found with id " + id, ex); + } + } + @DeleteMapping("/delete/{id}") @ResponseBody @PreAuthorize("hasRole('Coach')") @@ -42,4 +86,35 @@ public class SessionResource { } return "ok"; } + + private SessionDTO maptoDTO(Session s) { + SessionDTO dto = new SessionDTO(); + dto.setId(s.getId()); + dto.setName(s.getName()); + dto.setIsRecurrent(s.getIsRecurrent()); + dto.setCreneau(s.getCreneau()); + dto.setDuree(s.getDuree()); + dto.setGroupe(s.getGroupe()); + // Coach + if (s.getCoach() != null) { + dto.setCoachId(s.getCoach().getId()); + } + // Athletes + if (s.getAthletes() != null) { + List athleteIds = new ArrayList<>(); + for (Athlete athlete : s.getAthletes()) { + athleteIds.add(athlete.getId()); + } + dto.setAthleteIds(athleteIds); + } + // Activites + if (s.getActivites() != null) { + List activiteIds = new ArrayList<>(); + for (Activite activite : s.getActivites()) { + activiteIds.add(activite.getId()); + } + dto.setActiviteIds(activiteIds); + } + return dto; + } } From d124f2bda659864987f070ca8816d847116355a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 16:03:54 +0100 Subject: [PATCH 12/17] Feat: Ajout des DTO manquantes --- .../java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java | 7 +++++++ .../java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java | 3 +++ .../java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java | 9 +++++++++ .../java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java | 4 ---- .../main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java | 11 +++++++++++ 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java new file mode 100644 index 0000000..1846a71 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java @@ -0,0 +1,7 @@ +package hackathon.FrisbYEE.jpa.dto; +import lombok.Data; + +@Data +public class AdminDTO { + private String name; +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java index 997da42..0a3da0f 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java @@ -1,7 +1,10 @@ package hackathon.FrisbYEE.jpa.dto; + +import lombok.Data; import java.util.List; +@Data public class AthleteDTO { private String nom; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java new file mode 100644 index 0000000..581ea31 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java @@ -0,0 +1,9 @@ +package hackathon.FrisbYEE.jpa.dto; + +import lombok.Data; + +@Data +public class CoachDTO { + private String name; + +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java index be27f38..73f2b3c 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/SessionDTO.java @@ -1,12 +1,8 @@ package hackathon.FrisbYEE.jpa.dto; -import hackathon.FrisbYEE.jpa.metier.Activite; -import hackathon.FrisbYEE.jpa.metier.Athlete; -import hackathon.FrisbYEE.jpa.metier.Session; import lombok.Data; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; @Data diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java new file mode 100644 index 0000000..635dfc4 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java @@ -0,0 +1,11 @@ +package hackathon.FrisbYEE.jpa.dto; + +import hackathon.FrisbYEE.jpa.metier.Role; +import lombok.Data; + +@Data +public class UserDTO { + private String name; + private String email; + private Role role; +} From 98bd9c636b6fad2b9fd51ff7dace44b3a6ccf75c Mon Sep 17 00:00:00 2001 From: tuanvu Date: Mon, 5 Jan 2026 17:04:40 +0100 Subject: [PATCH 13/17] add reponseentity --- .../FrisbYEE/rest/SessionResource.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java index a55de28..3644583 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java @@ -10,15 +10,16 @@ import hackathon.FrisbYEE.jpa.service.AthleteDAO; import hackathon.FrisbYEE.jpa.service.CoachDAO; import hackathon.FrisbYEE.jpa.service.SessionDAO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -@Controller +@RestController @RequestMapping("/session") public class SessionResource { @@ -34,7 +35,7 @@ public class SessionResource { @PostMapping("/create") @ResponseBody @PreAuthorize("hasRole('Coach')") - public String create(@RequestBody SessionDTO dto) { + public ResponseEntity create(@RequestBody SessionDTO dto) { try { List athletes = athleteDAO.findAllById(dto.getAthleteIds()); Coach coach = coachDAO.findById(dto.getCoachId()).get(); @@ -46,45 +47,46 @@ public class SessionResource { session.setGroupe(dto.getGroupe()); session.setCoach(coach); session.setAthletes(athletes); + sessionDAO.save(session); + return ResponseEntity.status(HttpStatus.CREATED).body(maptoDTO(session)); } catch (Exception ex) { - return ex.toString(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage()); } - return "ok"; } @GetMapping("/all") @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") - public List getAll() { + public ResponseEntity> getAll() { List sessions = sessionDAO.findAll(); List dtos = new ArrayList<>(); for (Session session : sessions) { dtos.add(maptoDTO(session)); } - return dtos; + return ResponseEntity.ok(dtos); } @GetMapping("/{id}") @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") - public SessionDTO getById(@PathVariable Integer id) { + public ResponseEntity getById(@PathVariable Integer id) { try { Session session = sessionDAO.findById(id).orElseThrow(); - return maptoDTO(session); + return ResponseEntity.ok(maptoDTO(session)); } catch (Exception ex) { - throw new RuntimeException("Session not found with id " + id, ex); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); } } @DeleteMapping("/delete/{id}") @ResponseBody @PreAuthorize("hasRole('Coach')") - public String delete(@PathVariable("id") int id) { + public ResponseEntity delete(@PathVariable("id") int id) { try { Session session = sessionDAO.findById(id).get(); sessionDAO.delete(session); + return ResponseEntity.ok("Session deleted successfully"); } catch (Exception ex) { - return ex.toString(); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); } - return "ok"; } private SessionDTO maptoDTO(Session s) { From fad05e8bb12b0f988a95f01524d7eac745429ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Mon, 5 Jan 2026 22:20:29 +0100 Subject: [PATCH 14/17] Feat: Fin de ActiviteResource + ajout id dans les DTO (erreur de ma part) --- .../FrisbYEE/jpa/dto/ActiviteDTO.java | 1 + .../hackathon/FrisbYEE/jpa/dto/AdminDTO.java | 1 + .../FrisbYEE/jpa/dto/AthleteDTO.java | 1 + .../hackathon/FrisbYEE/jpa/dto/CoachDTO.java | 1 + .../hackathon/FrisbYEE/jpa/dto/UserDTO.java | 1 + .../FrisbYEE/rest/ActiviteResource.java | 84 +++++++++++++++++-- 6 files changed, 80 insertions(+), 9 deletions(-) diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java index 0b5316e..8302d63 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java @@ -6,6 +6,7 @@ import java.util.List; @Data public class ActiviteDTO { + private Integer id; private String name; private String theme; private Long duree; // optional, can be null diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java index 1846a71..3656be2 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AdminDTO.java @@ -3,5 +3,6 @@ import lombok.Data; @Data public class AdminDTO { + private Integer id; private String name; } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java index 0a3da0f..d47d2de 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java @@ -7,6 +7,7 @@ import java.util.List; @Data public class AthleteDTO { + private Integer id; private String nom; private String niveau; private String categorie; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java index 581ea31..32fb5f2 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/CoachDTO.java @@ -4,6 +4,7 @@ import lombok.Data; @Data public class CoachDTO { + private Integer id; private String name; } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java index 635dfc4..239977f 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/UserDTO.java @@ -5,6 +5,7 @@ import lombok.Data; @Data public class UserDTO { + private Integer id; private String name; private String email; private Role role; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java index 6a02fc9..271b4d7 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java @@ -6,9 +6,13 @@ import hackathon.FrisbYEE.jpa.metier.Session; import hackathon.FrisbYEE.jpa.service.ActiviteDAO; import hackathon.FrisbYEE.jpa.service.SessionDAO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.stream.Collectors; @Controller @RequestMapping("/activite") @@ -21,15 +25,15 @@ public class ActiviteResource { private SessionDAO sessionDAO; /* - POST /activite/create - DELETE /activite/delete/{id} - + * POST /activite/create + * DELETE /activite/delete/{id} + * */ @PostMapping("/create") @ResponseBody @PreAuthorize("hasRole('Coach')") - public String create(@RequestBody ActiviteDTO dto) { + public ResponseEntity create(@RequestBody ActiviteDTO dto) { try { Session session = sessionDAO.findById(dto.getSessionId()).get(); @@ -41,21 +45,83 @@ public class ActiviteResource { activite.setSession(session); activiteDAO.save(activite); } catch (Exception ex) { - return ex.toString(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + ex.getMessage()); } - return "ok"; + return ResponseEntity.status(HttpStatus.CREATED).body("Activity created"); } @DeleteMapping("/delete/{id}") @ResponseBody @PreAuthorize("hasRole('Coach')") - public String delete(@PathVariable("id") int id) { + public ResponseEntity delete(@PathVariable("id") int id) { try { Activite activite = activiteDAO.findById(id).get(); activiteDAO.delete(activite); } catch (Exception ex) { - return ex.toString(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + ex.getMessage()); + } - return "ok"; + return ResponseEntity.ok("Activity deleted"); + } + + @PostMapping("/update/{id}") + @ResponseBody + @PreAuthorize("hasRole('Coach')") + public ResponseEntity modifyById(@PathVariable("id") int id, @RequestBody ActiviteDTO dto) { + try { + Session session = sessionDAO.findById(dto.getSessionId()).get(); + Activite activite = activiteDAO.findById(id).get(); + activite.setName(dto.getName()); + activite.setTheme(dto.getTheme()); + activite.setDuree(dto.getDuree() != null ? dto.getDuree() : 0L); + activite.setDataActivite(dto.getDataActivite()); + activite.setSession(session); + activiteDAO.save(activite); + } catch (Exception ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + ex.getMessage()); + } + return ResponseEntity.ok("Activity modified"); + + } + + @GetMapping("/read/{id}") + @ResponseBody + public ResponseEntity getActivityById(@PathVariable("id") int id) { + try { + Activite activite = activiteDAO.findById(id).get(); + ActiviteDTO dto = new ActiviteDTO(); + dto.setName(activite.getName()); + dto.setId(activite.getId()); + dto.setTheme(activite.getTheme()); + dto.setDuree(activite.getDuree()); + dto.setDataActivite(activite.getDataActivite()); + dto.setSessionId(activite.getSession() != null ? activite.getSession().getId() : null); + + return ResponseEntity.ok(dto); + } catch (Exception ex) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); + } + } + + @GetMapping("/all") + @ResponseBody + public ResponseEntity> getAllActivity() { + try { + List activites = activiteDAO.findAll(); + List dtos = activites.stream().map(activite -> { + ActiviteDTO dto = new ActiviteDTO(); + dto.setName(activite.getName()); + dto.setId(activite.getId()); + dto.setTheme(activite.getTheme()); + dto.setDuree(activite.getDuree()); + dto.setDataActivite(activite.getDataActivite()); + dto.setSessionId(activite.getSession() != null ? activite.getSession().getId() : null); + return dto; + }).collect(Collectors.toList()); + return ResponseEntity.ok(dtos); + } catch (Exception ex) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); + } + } } From 5c191bcff0bf745b07baf2c035b565904212286c Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 00:03:27 +0100 Subject: [PATCH 15/17] Fixed compilation errors in AthleteResource --- .../FrisbYEE/jpa/interfaces/IAthlete.java | 9 +++++++++ .../hackathon/FrisbYEE/jpa/service/AthleteDAO.java | 2 ++ .../hackathon/FrisbYEE/rest/AthleteResource.java | 14 ++++++++------ 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/jpa/interfaces/IAthlete.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/interfaces/IAthlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/interfaces/IAthlete.java new file mode 100644 index 0000000..e84a030 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/interfaces/IAthlete.java @@ -0,0 +1,9 @@ +package hackathon.FrisbYEE.jpa.interfaces; + +import java.io.Serializable; + +public interface IAthlete{ + public void run(); + + +} diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java index 3782f74..476acc8 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/service/AthleteDAO.java @@ -1,9 +1,11 @@ package hackathon.FrisbYEE.jpa.service; import hackathon.FrisbYEE.jpa.metier.Athlete; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface AthleteDAO extends JpaRepository { + } \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java index 9b8b1cb..089b954 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -1,5 +1,6 @@ package hackathon.FrisbYEE.rest; +import org.apache.el.stream.Optional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import io.swagger.v3.oas.annotations.Operation; @@ -7,7 +8,8 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; +import hackathon.FrisbYEE.jpa.dto.AthleteDTO; +import hackathon.FrisbYEE.jpa.metier.Athlete; import hackathon.FrisbYEE.jpa.service.AthleteDAO; public class AthleteResource { @@ -18,16 +20,16 @@ public class AthleteResource { @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Récupère le Joueur ayant l'identifiant correspondant", content = @Content(mediaType = "application/json", - schema = @Schema(implementation = JoueurDTO.class))) + schema = @Schema(implementation = AthleteDTO.class))) }) @GetMapping("/joueur/{id}") - public JoueurDTO getJoueurById(@PathVariable Integer joueurId) { + public AthleteDTO getJoueurById(@PathVariable Integer joueurId) { // return pet System.out.println("ID A CHERCHER" + joueurId); - IJoueur j = dao.findOne(joueurId); - JoueurDTO jDTO = new JoueurDTO(null, null); + java.util.Optional j = athleteDAO.findById(joueurId); + AthleteDTO jDTO = new AthleteDTO(); System.out.println(j); return jDTO; } - + } From 4de8e2da22d19b87978bac799fe59964d1506bdb Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 08:41:18 +0100 Subject: [PATCH 16/17] Added little doc to compile/install dependencies --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ae7adc2..8f43eef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # hackathon +In order to launch any task (Maven compile, clean install ...) be sure to launch the Docker compose in the root directory with : +docker compose up ## Getting started From 9494bb34584ba889136fc664558abec221da8450 Mon Sep 17 00:00:00 2001 From: tuanvu Date: Tue, 6 Jan 2026 09:39:09 +0100 Subject: [PATCH 17/17] push activite athlete coach --- .../FrisbYEE/jpa/dto/ActiviteDTO.java | 1 - .../FrisbYEE/jpa/dto/AthleteDTO.java | 10 +- .../FrisbYEE/jpa/metier/Athlete.java | 2 +- .../FrisbYEE/rest/AthleteResource.java | 102 ++++++++++++++---- .../FrisbYEE/rest/CoachResource.java | 74 +++++++++++++ .../FrisbYEE/rest/SessionResource.java | 26 ++++- 6 files changed, 186 insertions(+), 29 deletions(-) create mode 100644 back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java index 8302d63..7759ef1 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/ActiviteDTO.java @@ -12,5 +12,4 @@ public class ActiviteDTO { private Long duree; // optional, can be null private List dataActivite; private Integer sessionId; - } \ No newline at end of file diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java index d47d2de..6820a44 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java @@ -1,16 +1,16 @@ package hackathon.FrisbYEE.jpa.dto; - import lombok.Data; import java.util.List; @Data public class AthleteDTO { - private Integer id; - private String nom; - private String niveau; + private String name; private String categorie; - private List groupes; + private String niveau; + private List groupes = new ArrayList<>(); + private List sessionIds = new ArrayList<>(); + private Integer userId; } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java index 9c6aa24..bec731d 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java @@ -15,7 +15,7 @@ import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; @Entity -@Getter @Setter @NoArgsConstructor +@Data @NoArgsConstructor @Access(AccessType.FIELD) public class Athlete { diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java index 089b954..1237601 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -3,33 +3,93 @@ package hackathon.FrisbYEE.rest; import org.apache.el.stream.Optional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; import hackathon.FrisbYEE.jpa.dto.AthleteDTO; import hackathon.FrisbYEE.jpa.metier.Athlete; import hackathon.FrisbYEE.jpa.service.AthleteDAO; +@RestController +@RequestMapping("/athletes") public class AthleteResource { - + @Autowired private AthleteDAO athleteDAO; - @Operation(summary = "Récupère tous les utilisateurs") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "Récupère le Joueur ayant l'identifiant correspondant", - content = @Content(mediaType = "application/json", - schema = @Schema(implementation = AthleteDTO.class))) - }) - @GetMapping("/joueur/{id}") - public AthleteDTO getJoueurById(@PathVariable Integer joueurId) { - // return pet - System.out.println("ID A CHERCHER" + joueurId); - java.util.Optional j = athleteDAO.findById(joueurId); - AthleteDTO jDTO = new AthleteDTO(); - System.out.println(j); - return jDTO; + @PostMapping("/create") + @PreAuthorize("hasRole('Admin')") // Only admin can create?? + public ResponseEntity create(@RequestBody AthleteDTO dto) { + Athlete ahtlete = new Athlete(); + athlete.setName(dto.getName()) + athlete.setCategorie(dto.getCategorie()) + athlete.setNiveau(dto.getNiveau()) + return ResponseEntity.status(HttpStatus.CREATED).body(mapToDTO(athlete)); + } + + @PostMapping("/all") + @PreAuthorize("hasRole('Admin') or hasRole('Coach') or hasRole('Athlete')") + public ReponseEntity> all() { + List athletes = athleteDAO.findAll(); + List dtos = new ArrayList<>(); + for (Athlete athlete : athletes) { + dtos.add(maptoDTO(athlete)); + } + return ResponseEntity.ok(dtos); + } + + @GetMapping("/{id}") + @PreAuthorize("hasRole('Admin') or hasRole('Coach') or hasRole('Athlete')") + public ResponseEntity getById(@PathVariable Integer id) { + return athleteDAO.findById(id) + .map(athlete -> ResponseEntity.ok(mapToDTO(athlete))) + .orElse(ResponseEntity.notFound().build()); + } + + @PutMapping("/{id}") + @PreAuthorize("hasRole('ADMIN') or #id == principal.id") + public ResponseEntity update(@PathVariable Integer id,@RequestBody AthleteDTO dto) { + try { + Athlete athlete = athleteDAO.findById(id).get(); + athlete.setName(dto.getName()); + athlete.setCategorie(dto.getCategorie()); + athlete.setNiveau(dto.getNiveau()); + + // Optional + athlete.setDuree(dto.getDuree()); + athlete.setTheme(dto.getTheme()); + + // List + if (dto.getDataActivite() != null) { + athlete.setDataActivite(dto.getDataActivite()); + } + + // Relationship: sessionId → session + if (dto.getSessionId() != null) { + Session session = sessionDAO.findById(dto.getSessionId()) + .orElseThrow(() -> new RuntimeException("Session not found")); + athlete.setSession(session); + } + + athleteDAO.save(athlete); + return ResponseEntity.ok(mapToDTO(athlete)); + }catch (Exception ex){ + return ResponseEntity.noContent().build(); + } + } + + @DeleteMapping("/{id}") + @PreAuthorize("hasRole('Admin')") + public ResponseEntity delete(@PathVariable Integer id) { + if (!athleteDAO.existsById(id)) { + return ResponseEntity.notFound().build(); + } + athleteDAO.deleteById(id); + return ResponseEntity.noContent().build(); + } + + private AthleteDTO mapToDTO(Athlete athlete) { + AthleteDTO dto = new AthleteDTO(); + dto.setId(athlete.getId()); + dto.setName(athlete.getName()); + dto.setCategorie(athlete.getCategorie()); + dto.setNiveau(athlete.getNiveau()); + return dto; } - } diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java new file mode 100644 index 0000000..ddb8c85 --- /dev/null +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java @@ -0,0 +1,74 @@ +package hackathon.FrisbYEE.rest; + +import hackathon.FrisbYEE.jpa.dto.CoachDTO; +import hackathon.FrisbYEE.jpa.metier.Coach; +import hackathon.FrisbYEE.jpa.service.CoachDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +import java.util.ArrayList; +import java.util.List; + +public class CoachResource { + @Autowired + private CoachDAO coachDAO; + + @PostMapping("/create") + @PreAuthorize("hasRole('Admin')") // Only admin can create + public ResponseEntity create(@RequestBody CoachDTO dto) { + Coach coach = new Coach(); + coach.setName(dto.getName()); + coachDAO.save(coach); + return ResponseEntity.status(HttpStatus.CREATED).body(mapToDTO(coach)); + } + + @GetMapping("/all") + @PreAuthorize("hasRole('Admin') or hasRole('Coach')") + public List getAll() { + List coaches = coachDAO.findAll(); + List dtos = new ArrayList<>(); + for (Coach coach : coaches) { + dtos.add(mapToDTO(coach)); + } + return dtos; + } + + @GetMapping("/{id}") + @PreAuthorize("hasRole('Admin') or hasRole('Coach')") + public CoachDTO getById(@PathVariable Integer id) { + Coach coach = coachDAO.findById(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Coach not found")); + return mapToDTO(coach); + } + + @PutMapping("/update/{id}") + @PreAuthorize("hasRole('Admin')") + public ResponseEntity update(@PathVariable Integer id, @RequestBody CoachDTO dto) { + Coach coach = coachDAO.findById(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Coach not found")); + if (dto.getName() != null) coach.setName(dto.getName()); + coachDAO.save(coach); + return ResponseEntity.ok(mapToDTO(coach)); + } + + @DeleteMapping("/delete/{id}") + @PreAuthorize("hasRole('Admin')") + public ResponseEntity delete(@PathVariable Integer id) { + Coach coach = coachDAO.findById(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Coach not found")); + coachDAO.delete(coach); + return ResponseEntity.noContent().build(); + } + + private CoachDTO mapToDTO(Coach coach) { + CoachDTO dto = new CoachDTO(); + dto.setId(coach.getId()); + dto.setName(coach.getName()); + return dto; + } +} + diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java index 3644583..dfdf6db 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/SessionResource.java @@ -13,8 +13,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; import java.util.ArrayList; import java.util.List; @@ -32,6 +32,9 @@ public class SessionResource { @Autowired private AthleteDAO athleteDAO; + @Autowired + private ActiviteDAO activiteDAO; + @PostMapping("/create") @ResponseBody @PreAuthorize("hasRole('Coach')") @@ -89,6 +92,27 @@ public class SessionResource { } } + @PutMapping("/update/{id}") + @PreAuthorize("hasRole('Coach')") + public ResponseEntity updateSession(@PathVariable Integer id, @RequestBody SessionDTO dto) { + Session session = sessionDAO.findById(id).orElseThrow(() -> new ResponseStatusException( + HttpStatus.NOT_FOUND, "Session not found with id " + id)); + + if (dto.getDuree() != null) { + session.setDuree(dto.getDuree()); + } + if (dto.getAthleteIds() != null) { + List athletes = athleteDAO.findAllById(dto.getAthleteIds()); + session.setAthletes(athletes); + } + if (dto.getActiviteIds() != null) { + List activites = activiteDAO.findAllById(dto.getActiviteIds()); + session.setActivites(activites); + } + sessionDAO.save(session); + return ResponseEntity.noContent().build(); + } + private SessionDTO maptoDTO(Session s) { SessionDTO dto = new SessionDTO(); dto.setId(s.getId());