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