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/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(); - - -} 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; 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); + } + + } + } 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 1237601..6944a35 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/AthleteResource.java @@ -1,35 +1,56 @@ package hackathon.FrisbYEE.rest; -import org.apache.el.stream.Optional; +import java.time.LocalDate; +import java.time.chrono.ChronoLocalDateTime; +import java.util.ArrayList; +import java.util.List; + +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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import org.springframework.web.bind.annotation.RequestMapping; +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; @RestController @RequestMapping("/athletes") public class AthleteResource { @Autowired private AthleteDAO athleteDAO; + private SessionDAO sessionDAO; @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()) + Athlete athlete = 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() { + 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); } @@ -51,20 +72,15 @@ 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()); - } - // Relationship: sessionId → session - if (dto.getSessionId() != null) { - Session session = sessionDAO.findById(dto.getSessionId()) - .orElseThrow(() -> new RuntimeException("Session not found")); - athlete.setSession(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); @@ -92,4 +108,104 @@ public class AthleteResource { dto.setNiveau(athlete.getNiveau()); return dto; } + @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<>(); + } }