From 04d04fcc0ee6dc19ad2487abdb3455517b54b69b Mon Sep 17 00:00:00 2001 From: Paul <paul.cancel.etu@univ-lille.fr> Date: Tue, 21 Jan 2025 14:28:47 +0100 Subject: [PATCH] Ajout du RestController --- pom.xml | 10 ++- .../MeetingPlannr/config/WebConfig.java | 2 + .../controller/MeetingRestController.java | 72 +++++++++++++++++++ .../repository/MeetingRepository.java | 2 + .../MeetingPlannr/security/Security.java | 2 +- 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/main/java/fr/but/infoetu/MeetingPlannr/controller/MeetingRestController.java diff --git a/pom.xml b/pom.xml index a93a9ce..010f220 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>3.4.0</version> + <version>3.2.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>fr.but.infoetu</groupId> @@ -77,6 +77,14 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> </dependencies> <build> diff --git a/src/main/java/fr/but/infoetu/MeetingPlannr/config/WebConfig.java b/src/main/java/fr/but/infoetu/MeetingPlannr/config/WebConfig.java index 2c5620f..c650bbe 100644 --- a/src/main/java/fr/but/infoetu/MeetingPlannr/config/WebConfig.java +++ b/src/main/java/fr/but/infoetu/MeetingPlannr/config/WebConfig.java @@ -1,9 +1,11 @@ package fr.but.infoetu.meetingplannr.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + @Configuration public class WebConfig implements WebMvcConfigurer { @Override diff --git a/src/main/java/fr/but/infoetu/MeetingPlannr/controller/MeetingRestController.java b/src/main/java/fr/but/infoetu/MeetingPlannr/controller/MeetingRestController.java new file mode 100644 index 0000000..aaa0289 --- /dev/null +++ b/src/main/java/fr/but/infoetu/MeetingPlannr/controller/MeetingRestController.java @@ -0,0 +1,72 @@ +package fr.but.infoetu.meetingplannr.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMapping; + +import fr.but.infoetu.meetingplannr.pojo.Meeting; +import fr.but.infoetu.meetingplannr.repository.MeetingRepository; +import fr.but.infoetu.meetingplannr.repository.UserRepository; + +import java.time.LocalDate; +import java.util.List; + +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +@RestController +@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE) +public class MeetingRestController { + @Autowired + private MeetingRepository meetingRepository; + + @Autowired + private UserRepository userRepository; + + @GetMapping("/todayslist/{date}") + public ResponseEntity<List<Meeting>> getMeetingsByDate( + @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) { + try { + List<Meeting> meetings = meetingRepository.findByRequestDate(date); + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_JSON) + .body(meetings); + } catch (Exception e) { + return ResponseEntity.badRequest().build(); + } + } + + @GetMapping("/myappointments/{username}") + public ResponseEntity<?> getFutureMeetingsByName(@PathVariable String username) { + try { + var user = userRepository.findByUsername(username); + + if (user.isEmpty()) { + return ResponseEntity.notFound().build(); + } + + List<Meeting> meetings = meetingRepository + .findByUserAndRequestDateGreaterThanEqualOrderByRequestDateAsc( + user.get(), + LocalDate.now() + ); + + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_JSON) + .body(meetings); + + } catch (Exception e) { + return ResponseEntity + .status(HttpStatus.INTERNAL_SERVER_ERROR) + .body("Error retrieving meetings: " + e.getMessage()); + } + } +} diff --git a/src/main/java/fr/but/infoetu/MeetingPlannr/repository/MeetingRepository.java b/src/main/java/fr/but/infoetu/MeetingPlannr/repository/MeetingRepository.java index 26aaaf5..bb20f64 100644 --- a/src/main/java/fr/but/infoetu/MeetingPlannr/repository/MeetingRepository.java +++ b/src/main/java/fr/but/infoetu/MeetingPlannr/repository/MeetingRepository.java @@ -21,4 +21,6 @@ public interface MeetingRepository extends JpaRepository<Meeting, Integer> { boolean existsByRequest(Request req); List<Meeting> findByRequestReasonContainingOrRequestDescriptionContaining(String reason, String description); + + List<Meeting> findByUserAndRequestDateGreaterThanEqualOrderByRequestDateAsc(User user, LocalDate date); } diff --git a/src/main/java/fr/but/infoetu/MeetingPlannr/security/Security.java b/src/main/java/fr/but/infoetu/MeetingPlannr/security/Security.java index d07797a..e593c5a 100644 --- a/src/main/java/fr/but/infoetu/MeetingPlannr/security/Security.java +++ b/src/main/java/fr/but/infoetu/MeetingPlannr/security/Security.java @@ -72,7 +72,7 @@ public class Security { .requestMatchers(mvc.pattern("/public/**"), mvc.pattern("styles/**"), mvc.pattern("/common/**"), - mvc.pattern("/uploads/**")).permitAll() // Allow access to uploads + mvc.pattern("/uploads/**")).permitAll() .requestMatchers(mvc.pattern("/perform_login")).permitAll() .requestMatchers(mvc.pattern("/user/**")).authenticated() .requestMatchers(mvc.pattern("/admin/**")).hasRole("ADMIN") -- GitLab