From ba9ec81065c564f5f84874d1282cc7d8270b1d35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=B2=9C=20=EC=A7=84=EA=B0=95?= <jjjjjk12@ajou.ac.kr>
Date: Wed, 4 Dec 2024 22:13:31 +0900
Subject: [PATCH] =?UTF-8?q?feat(spring):=20=ED=99=94=EC=9E=AC=20=EA=B4=80?=
 =?UTF-8?q?=EB=A0=A8=20API=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=82=AC?=
 =?UTF-8?q?=EC=9A=A9=EC=9E=90,=20=EC=B0=A8=EB=9F=89=20=EC=A1=B0=ED=9A=8C?=
 =?UTF-8?q?=20API=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../thiefsil/config/WebSocketHandler.java     |  5 ++
 .../thiefsil/controller/MainController.java   | 27 +++++++++--
 .../org/example/thiefsil/dto/FireDTO.java     |  7 +++
 .../thiefsil/service/ChargingService.java     | 47 +++++++++++++------
 4 files changed, 68 insertions(+), 18 deletions(-)

diff --git a/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java b/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java
index 5e50cf0..3362f31 100644
--- a/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java
+++ b/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java
@@ -25,15 +25,20 @@ public class WebSocketHandler  extends TextWebSocketHandler {
     @Override
     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
         String str = message.getPayload();
+
+        if (!str.contains("-")) return;
+
         String lot = str.split("-")[0];
         String cmd = str.split("-")[1];
 
         System.out.println("주차 성공");
+        System.out.println(str);
 
 
 
             if (cmd.equals("PARK")) {
                 chargingService.park(lot);
+                session.sendMessage(new TextMessage( lot + "-PARK"));
             }
 
             else if (cmd.length() >= 6) {
diff --git a/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java b/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java
index 4776466..0598f91 100644
--- a/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java
+++ b/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java
@@ -1,35 +1,54 @@
 package org.example.thiefsil.controller;
 
 import lombok.RequiredArgsConstructor;
+import org.example.thiefsil.dto.FireDTO;
 import org.example.thiefsil.entity.Cache;
+import org.example.thiefsil.entity.Driver;
 import org.example.thiefsil.repository.CacheRepository;
+import org.example.thiefsil.repository.DriverRepository;
 import org.example.thiefsil.repository.SocketRepository;
+import org.example.thiefsil.service.ChargingService;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.socket.TextMessage;
 import org.springframework.web.socket.WebSocketSession;
 
 import java.io.IOException;
 import java.util.List;
 
-@Controller
+@RestController
 @RequiredArgsConstructor
+@CrossOrigin(origins = "*")
 public class MainController {
 
     private final SocketRepository socketRepository;
+    private final ChargingService chargingService;
     private final CacheRepository cacheRepository;
+    private final DriverRepository driverRepository;
 
     @GetMapping("/api/clear")
     public void clear() throws IOException {
         List<WebSocketSession> sessions = socketRepository.findAllSession();
-
+        chargingService.extinguish();
         for (WebSocketSession session : sessions) {
             session.sendMessage(new TextMessage("CLEAR"));
         }
     }
 
-    @GetMapping("/api/cache")
-    public List<Cache> cache() {
+    @GetMapping("/api/cars")
+    public List<Cache> car() {
         return cacheRepository.findAll();
     }
+
+    @GetMapping("/api/users")
+    public List<Driver> driver() {
+        return driverRepository.findAll();
+    }
+
+    @GetMapping("/api/fire")
+    public FireDTO fire() {
+        return new FireDTO(chargingService.isFireState());
+    }
 }
diff --git a/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java b/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java
index c816e0e..d8945a5 100644
--- a/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java
+++ b/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java
@@ -1,4 +1,11 @@
 package org.example.thiefsil.dto;
 
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+@Data
+@AllArgsConstructor
 public class FireDTO {
+    boolean fire;
 }
diff --git a/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java b/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java
index f57d83c..3841398 100644
--- a/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java
+++ b/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java
@@ -9,6 +9,7 @@ import jakarta.persistence.PersistenceContext;
 import jakarta.transaction.Transactional;
 import lombok.RequiredArgsConstructor;
 import org.example.thiefsil.dto.CarDTO;
+import org.example.thiefsil.dto.FireDTO;
 import org.example.thiefsil.dto.ValidateCarDTO;
 import org.example.thiefsil.entity.Cache;
 import org.example.thiefsil.entity.Driver;
@@ -42,6 +43,7 @@ public class ChargingService {
     private final WebMailService webMailService;
     private final EntityManager entityManager;
     private final CacheRepository cacheRepository;
+    static private boolean fireState = false;
 
     @Value("${test.mail}")
     private String mail;
@@ -52,21 +54,27 @@ public class ChargingService {
         while (session.isOpen()) {
             ObjectMapper mapper = new ObjectMapper();
             mapper.registerModule(new JavaTimeModule());
+            if (fireState) {
+                session.sendMessage(new TextMessage(mapper.writeValueAsString(new FireDTO(fireState))));
+            }
 
-            List<CarDTO> list = new ArrayList<>(10);
-            for (int i = 0; i < 10; i++) {
-                Vehicle vehicle = vehicleRepository.findVehicleByCharger(i).orElse(null);
-                if (vehicle != null) {
-                    System.out.println(vehicle);
+            else {
+                List<CarDTO> list = new ArrayList<>(10);
+                for (int i = 0; i < 10; i++) {
+                    Vehicle vehicle = vehicleRepository.findVehicleByCharger(i).orElse(null);
+                    if (vehicle != null) {
+                        System.out.println(vehicle);
+                    }
+                    CarDTO tmp = CarDTO.builder()
+                            .position(i)
+                            .car(vehicle)
+                            .build();
+                    list.add(tmp);
                 }
-                CarDTO tmp = CarDTO.builder()
-                        .position(i)
-                        .car(vehicle)
-                        .build();
-                list.add(tmp);
+
+                session.sendMessage(new TextMessage(mapper.writeValueAsString(list)));
             }
 
-            session.sendMessage(new TextMessage(mapper.writeValueAsString(list)));
             Thread.sleep(1000);
         }
     }
@@ -130,10 +138,18 @@ public class ChargingService {
         for (WebSocketSession session : sessions) {
             session.sendMessage(new TextMessage(lot + "-FIRE"));
         }
-
+        fireState = true;
         webMailService.sendFireMail(lot);
     }
 
+    public void extinguish() {
+        fireState = false;
+    }
+
+    public boolean isFireState() {
+        return fireState;
+    }
+
     @Scheduled(fixedRate = 60000)
     public void overParking() {
         LocalDateTime park = LocalDateTime.now(ZoneId.of("Asia/Seoul"));
@@ -161,6 +177,9 @@ public class ChargingService {
         Cache cache = cacheRepository.findByNumber(number).orElse(null);
 
         if (cache != null) {
+            if (cache.isElectric()) {
+                makeVehicle(lot, number);
+            }
             return cache.isElectric();
         }
 
@@ -190,9 +209,9 @@ public class ChargingService {
 
     @PostConstruct
     public void init() {
-
-        driverRepository.deleteAll();
         vehicleRepository.deleteAll();
+        driverRepository.deleteAll();
+
 
         Driver d1 = Driver.builder().id(1L).name("홍길동").email(mail).build();
         Driver d2 = Driver.builder().id(2L).name("구자욱").email(mail).build();
-- 
GitLab