Merge branch 'jpa'

This commit is contained in:
tuanvu
2026-01-06 15:04:27 +01:00
6 changed files with 169 additions and 32 deletions

View File

@@ -1,6 +1,8 @@
package hackathon.FrisbYEE.jpa.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data

View File

@@ -1,9 +0,0 @@
package hackathon.FrisbYEE.jpa.interfaces;
import java.io.Serializable;
public interface IAthlete{
public void run();
}

View File

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

View File

@@ -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<Activite, Integer> {
List<Activite> findByTheme(String theme);
}

View File

@@ -84,7 +84,8 @@ public class ActiviteResource {
}
@GetMapping("/read/{id}")
@GetMapping("/{id}")
@PreAuthorize("hasRole('Coach') or hasRole('Athlete')")
@ResponseBody
public ResponseEntity<ActiviteDTO> getActivityById(@PathVariable("id") int id) {
try {
@@ -104,6 +105,7 @@ public class ActiviteResource {
}
@GetMapping("/all")
@PreAuthorize("hasRole('Coach') or hasRole('Athlete')")
@ResponseBody
public ResponseEntity<List<ActiviteDTO>> getAllActivity() {
try {
@@ -124,4 +126,28 @@ public class ActiviteResource {
}
}
@GetMapping("/theme/{theme}")
@PreAuthorize("hasRole('Coach') or hasRole('Athlete')")
@ResponseBody
public ResponseEntity<List<ActiviteDTO>> getActivityByTheme(@PathVariable("theme") String theme) {
try {
List<Activite> activites = activiteDAO.findByTheme(theme);
List<ActiviteDTO> 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);
}
}
}

View File

@@ -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<AthleteDTO> 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<List<AthleteDTO>> all() {
public ResponseEntity<List<AthleteDTO>> all() {
List<Athlete> athletes = athleteDAO.findAll();
List<AthleteDTO> 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<Session> 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<SessionDTO> getSessionsAthlete(@PathVariable Integer athleteId) {
// return pet
System.out.println("ID A CHERCHER" + athleteId);
java.util.Optional<Athlete> j = athleteDAO.findById(athleteId);
List<Session> sessions = sessionDAO.findAll();
List<SessionDTO> 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<SessionDTO> getAllSessions() {
List<Session> sessions = sessionDAO.findAll();
System.out.println(sessions);
List<SessionDTO> 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<ActiviteDTO> getActivitiesForSession(@PathVariable Integer id) {
// Récupérer la session par ID
java.util.Optional<Session> sessionOpt = sessionDAO.findById(id);
if (sessionOpt.isPresent()) {
Session session = sessionOpt.get();
// Retourner les activités de la session
List<ActiviteDTO> 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<SessionDTO> getSessionsAfterDate(@PathVariable Integer id, @PathVariable String date) {
// Récupérer l'athlète par ID
java.util.Optional<Athlete> 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<Session> sessions = sessionDAO.findAll();
List<SessionDTO> 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<SessionDTO> getSessionsBetweenDates(@PathVariable Integer id, @PathVariable String startDate, @PathVariable String endDate) {
// Récupérer l'athlète par ID
java.util.Optional<Athlete> 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<Session> sessions = sessionDAO.findAll();
List<SessionDTO> 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<>();
}
}