From 0c82691a4020f92d9f84c68f0e5660517db40817 Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 10:02:10 +0100 Subject: [PATCH 1/7] Athlete endpoints, not finished --- .../FrisbYEE/rest/AthleteResource.java | 118 +++++++++++++++++- 1 file changed, 114 insertions(+), 4 deletions(-) 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..d04c2c0 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,10 @@ package hackathon.FrisbYEE.rest; +import java.time.LocalDate; +import java.time.chrono.ChronoLocalDateTime; +import java.util.ArrayList; +import java.util.List; + import org.apache.el.stream.Optional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -8,13 +13,19 @@ 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.ActiviteDTO; import hackathon.FrisbYEE.jpa.dto.AthleteDTO; +import hackathon.FrisbYEE.jpa.dto.SessionDTO; +import hackathon.FrisbYEE.jpa.metier.Activite; import hackathon.FrisbYEE.jpa.metier.Athlete; +import hackathon.FrisbYEE.jpa.metier.Session; import hackathon.FrisbYEE.jpa.service.AthleteDAO; +import hackathon.FrisbYEE.jpa.service.SessionDAO; public class AthleteResource { private AthleteDAO athleteDAO; + private SessionDAO sessionDAO; @Operation(summary = "Récupère tous les utilisateurs") @ApiResponses(value = { @@ -22,14 +33,113 @@ public class AthleteResource { content = @Content(mediaType = "application/json", schema = @Schema(implementation = AthleteDTO.class))) }) - @GetMapping("/joueur/{id}") - public AthleteDTO getJoueurById(@PathVariable Integer joueurId) { + @GetMapping("/athlete/{id}") + public AthleteDTO getAthleteById(@PathVariable Integer athleteId) { // return pet - System.out.println("ID A CHERCHER" + joueurId); - java.util.Optional j = athleteDAO.findById(joueurId); + System.out.println("ID A CHERCHER" + athleteId); + java.util.Optional j = athleteDAO.findById(athleteId); AthleteDTO jDTO = new AthleteDTO(); System.out.println(j); return jDTO; } + @GetMapping("/athlete/{id}/session") + public List getSessionsAthlete(@PathVariable Integer athleteId) { + // return pet + System.out.println("ID A CHERCHER" + athleteId); + java.util.Optional j = athleteDAO.findById(athleteId); + List sessions = sessionDAO.findAll(); + List athleteSessions = new ArrayList<>(); + for(Session s : sessions){ + if(s.getAthletes().contains(j.get())){ + SessionDTO dto = new SessionDTO(); + dto.setId(s.getId()); + dto.setName(s.getName()); + // Map other fields as necessary + athleteSessions.add(dto); + } + } + System.out.println(j); + return athleteSessions; + } + @GetMapping("/athletes/session") + public List getAllSessions() { + List sessions = sessionDAO.findAll(); + System.out.println(sessions); + List sessionDTOs = new ArrayList<>(); + for (Session session : sessions) { + SessionDTO dto = new SessionDTO(); + dto.setId(session.getId()); + dto.setName(session.getName()); + // Map other fields as necessary + sessionDTOs.add(dto); + } + return sessionDTOs; + } + + @GetMapping("/athletes/session/{id}/activities") + public List getActivitiesForSession(@PathVariable Integer id) { + // Récupérer la session par ID + java.util.Optional sessionOpt = sessionDAO.findById(id); + if (sessionOpt.isPresent()) { + Session session = sessionOpt.get(); + // Retourner les activités de la session + List activiteDTOs = new ArrayList<>(); + for (Activite activite : session.getActivites()) { + ActiviteDTO dto = new ActiviteDTO(); + dto.setId(activite.getId()); + dto.setName(activite.getName()); + // Map other fields as necessary + activiteDTOs.add(dto); + } + return activiteDTOs; + } + return new ArrayList<>(); + } + + @GetMapping("/athletes/{id}/session/after/{date}") + public List getSessionsAfterDate(@PathVariable Integer id, @PathVariable String date) { + // Récupérer l'athlète par ID + java.util.Optional athleteOpt = athleteDAO.findById(id); + if (athleteOpt.isPresent()) { + Athlete athlete = athleteOpt.get(); + // Récupérer les sessions de l'athlète après la date donnée + List sessions = sessionDAO.findAll(); + List filteredSessions = new ArrayList<>(); + for (Session session : sessions) { + if (session.getAthletes().contains(athlete) && session.getCreneau().isAfter(ChronoLocalDateTime.from(LocalDate.parse(date)))) { //WTF toujours sympa les dates + SessionDTO dto = new SessionDTO(); + dto.setId(session.getId()); + dto.setName(session.getName()); + // Map other fields as necessary + filteredSessions.add(dto); + } + } + return filteredSessions; + } + return new ArrayList<>(); + } + + @GetMapping("/athletes/{id}/session/between/{startDate}/{endDate}") + public List getSessionsBetweenDates(@PathVariable Integer id, @PathVariable String startDate, @PathVariable String endDate) { + // Récupérer l'athlète par ID + java.util.Optional athleteOpt = athleteDAO.findById(id); + if (athleteOpt.isPresent()) { + Athlete athlete = athleteOpt.get(); + // Récupérer les sessions de l'athlète entre les deux dates données + List sessions = sessionDAO.findAll(); + List filteredSessions = new ArrayList<>(); + for (Session session : sessions) { + if (session.getAthletes().contains(athlete) && session.getCreneau().isAfter(ChronoLocalDateTime.from(LocalDate.parse(startDate))) && session.getCreneau().isBefore(ChronoLocalDateTime.from(LocalDate.parse(endDate)))) { + SessionDTO dto = new SessionDTO(); + dto.setId(session.getId()); + dto.setName(session.getName()); + // Map other fields as necessary + filteredSessions.add(dto); + } + } + return filteredSessions; + } + return new ArrayList<>(); + } } From 741d01bcd200ae68e57412a36860c18957977eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Tue, 6 Jan 2026 10:07:34 +0100 Subject: [PATCH 2/7] =?UTF-8?q?Feat:=20Ajout=20m=C3=A9thode=20sur=20Activi?= =?UTF-8?q?teRessource?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FrisbYEE/jpa/service/ActiviteDAO.java | 3 ++ .../FrisbYEE/rest/ActiviteResource.java | 28 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) 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 94d3e0a..1b36e20 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 @@ -3,8 +3,11 @@ package hackathon.FrisbYEE.jpa.service; import hackathon.FrisbYEE.jpa.metier.Activite; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; @Repository public interface ActiviteDAO extends JpaRepository { + + List findByTheme(String theme); } 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 271b4d7..83a7426 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/ActiviteResource.java @@ -84,7 +84,8 @@ public class ActiviteResource { } - @GetMapping("/read/{id}") + @GetMapping("/{id}") + @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") @ResponseBody public ResponseEntity getActivityById(@PathVariable("id") int id) { try { @@ -104,6 +105,7 @@ public class ActiviteResource { } @GetMapping("/all") + @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") @ResponseBody public ResponseEntity> getAllActivity() { try { @@ -124,4 +126,28 @@ public class ActiviteResource { } } + + @GetMapping("/theme/{theme}") + @PreAuthorize("hasRole('Coach') or hasRole('Athlete')") + @ResponseBody + public ResponseEntity> getActivityByTheme(@PathVariable("theme") String theme) { + try { + List activites = activiteDAO.findByTheme(theme); + 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 5e5661635eae8942ab859faafc62531decea5de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ama=C3=ABl=20Kesteman?= Date: Tue, 6 Jan 2026 10:17:04 +0100 Subject: [PATCH 3/7] Feat: Ajout des imports manquants pour Athlete DTO + Athlete --- .../src/main/java/hackathon/FrisbYEE/jpa/dto/AthleteDTO.java | 2 ++ .../src/main/java/hackathon/FrisbYEE/jpa/metier/Athlete.java | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) 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 6820a44..d950475 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,6 +1,8 @@ package hackathon.FrisbYEE.jpa.dto; import lombok.Data; + +import java.util.ArrayList; import java.util.List; @Data 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 bec731d..fb7d318 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 @@ -4,9 +4,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToMany; import jakarta.persistence.OneToOne; -import lombok.Getter; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Setter; import java.util.ArrayList; import java.util.List; import jakarta.persistence.Access; From c9891ae7e8468f54bc23167c0098c42ca3189599 Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 10:49:24 +0100 Subject: [PATCH 4/7] Still a few errors to correct --- .../FrisbYEE/jpa/metier/Athlete.java | 1 + .../FrisbYEE/rest/AthleteResource.java | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) 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 bec731d..c424329 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 @@ -4,6 +4,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToMany; import jakarta.persistence.OneToOne; +import lombok.Data; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; 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 d56c2ff..a2c9073 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -6,8 +6,19 @@ import java.util.ArrayList; import java.util.List; import org.apache.el.stream.Optional; +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.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import org.springframework.web.bind.annotation.RequestMapping; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -33,19 +44,19 @@ public class AthleteResource { @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()) + ahtlete.setName(dto.getName()); + ahtlete.setCategorie(dto.getCategorie()); + ahtlete.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() { + public ResponseEntity> all() { List athletes = athleteDAO.findAll(); List dtos = new ArrayList<>(); for (Athlete athlete : athletes) { - dtos.add(maptoDTO(athlete)); + dtos.add(mapToDTO(athlete)); } return ResponseEntity.ok(dtos); } @@ -67,10 +78,6 @@ public class AthleteResource { 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()); @@ -80,7 +87,7 @@ public class AthleteResource { if (dto.getSessionId() != null) { Session session = sessionDAO.findById(dto.getSessionId()) .orElseThrow(() -> new RuntimeException("Session not found")); - athlete.setSession(session); + athlete.setSessions(new ArrayList<>(List.of(session))); } athleteDAO.save(athlete); From 0afb619d40fdfd596c06827bb73171b528f27537 Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 11:02:24 +0100 Subject: [PATCH 5/7] Resolved errors in AthleteResource --- .../FrisbYEE/rest/AthleteResource.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) 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 a2c9073..fde65e0 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -43,10 +44,10 @@ public class AthleteResource { @PostMapping("/create") @PreAuthorize("hasRole('Admin')") // Only admin can create?? public ResponseEntity create(@RequestBody AthleteDTO dto) { - Athlete ahtlete = new Athlete(); - ahtlete.setName(dto.getName()); - ahtlete.setCategorie(dto.getCategorie()); - ahtlete.setNiveau(dto.getNiveau()); + Athlete athlete = new Athlete(); + athlete.setName(dto.getName()); + athlete.setCategorie(dto.getCategorie()); + athlete.setNiveau(dto.getNiveau()); return ResponseEntity.status(HttpStatus.CREATED).body(mapToDTO(athlete)); } @@ -78,16 +79,15 @@ public class AthleteResource { athlete.setCategorie(dto.getCategorie()); athlete.setNiveau(dto.getNiveau()); - // 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.setSessions(new ArrayList<>(List.of(session))); + if (dto.getSessionIds() != null) { + List sessions = new ArrayList<>(); + for (Integer sessionId : dto.getSessionIds()) { + Session session = sessionDAO.findById(sessionId) + .orElseThrow(() -> new RuntimeException("Session not found")); + sessions.add(session); + } + athlete.setSessions(sessions); } athleteDAO.save(athlete); From 90b55bea38133f4fb1dba184ae8a872acb6f2532 Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 11:04:06 +0100 Subject: [PATCH 6/7] Removed unused imports --- .../main/java/hackathon/FrisbYEE/rest/AthleteResource.java | 7 ------- 1 file changed, 7 deletions(-) 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 fde65e0..6944a35 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -5,7 +5,6 @@ import java.time.chrono.ChronoLocalDateTime; import java.util.ArrayList; import java.util.List; -import org.apache.el.stream.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,12 +18,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; - -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.ActiviteDTO; import hackathon.FrisbYEE.jpa.dto.AthleteDTO; import hackathon.FrisbYEE.jpa.dto.SessionDTO; From d38b88e68c6f232165322b68f81202ceac0a1d18 Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Tue, 6 Jan 2026 11:07:21 +0100 Subject: [PATCH 7/7] Removed unused interface --- .../java/hackathon/FrisbYEE/jpa/interfaces/IAthlete.java | 9 --------- 1 file changed, 9 deletions(-) delete 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 deleted file mode 100644 index e84a030..0000000 --- a/back_end/src/main/java/hackathon/FrisbYEE/jpa/interfaces/IAthlete.java +++ /dev/null @@ -1,9 +0,0 @@ -package hackathon.FrisbYEE.jpa.interfaces; - -import java.io.Serializable; - -public interface IAthlete{ - public void run(); - - -}