From cf73d6b0cfc039b71ebed1dc3bfd76e2e5255819 Mon Sep 17 00:00:00 2001 From: komp15 <77535280+komp15@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:46:28 +0200 Subject: [PATCH] :zap: Introduced proxy design pattern in iParking module --- .../pwrapi/service/parking/ParkingProxy.java | 53 +++++++++++++++++++ .../service/parking/ParkingServiceImpl.java | 13 ++--- .../wms/pwrapi/parking/ParkingProxyTest.java | 37 +++++++++++++ 3 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 src/main/java/dev/wms/pwrapi/service/parking/ParkingProxy.java create mode 100644 src/test/java/dev/wms/pwrapi/parking/ParkingProxyTest.java diff --git a/src/main/java/dev/wms/pwrapi/service/parking/ParkingProxy.java b/src/main/java/dev/wms/pwrapi/service/parking/ParkingProxy.java new file mode 100644 index 0000000..20ac0fd --- /dev/null +++ b/src/main/java/dev/wms/pwrapi/service/parking/ParkingProxy.java @@ -0,0 +1,53 @@ +package dev.wms.pwrapi.service.parking; + +import dev.wms.pwrapi.dao.parking.ParkingDAO; +import dev.wms.pwrapi.dto.parking.Parking; +import dev.wms.pwrapi.dto.parking.ParkingWithHistory; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +/** + * In order to reduce stress on university servers, we use proxy design pattern so + * server is called if we requested data minimum one minute before + */ +@AllArgsConstructor +@Component +public class ParkingProxy { + private ParkingDAO parkingDAO; + private List parkingState; + private List parkingWithHistoryState; + + public List getParkingState() throws IOException { + if(parkingStateQualifies(parkingState)){ + parkingState = parkingDAO.getProcessedParkingInfo(); + } + return parkingState; + } + + public List getParkingWithHistory() throws IOException { + if(parkingStateWithHistoryQualifiesForUpdate(parkingWithHistoryState)){ + parkingWithHistoryState = parkingDAO.getRawParkingData(); + + } + return parkingWithHistoryState; + } + + private boolean parkingStateQualifies(List parkingState){ + return parkingState == null || parkingState.isEmpty() || parseUpdateTime(parkingState.get(0).getLastUpdate()).isBefore(LocalDateTime.now().minusMinutes(1)); + } + + private boolean parkingStateWithHistoryQualifiesForUpdate(List parkingWithHistoryState){ + return parkingState == null || parkingWithHistoryState.isEmpty() || parseUpdateTime(parkingWithHistoryState.get(0).getLastUpdate()).isBefore(LocalDateTime.now().minusMinutes(1)); + } + + private LocalDateTime parseUpdateTime(String lastUpdate){ + return LocalDateTime.parse(lastUpdate, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + + +} diff --git a/src/main/java/dev/wms/pwrapi/service/parking/ParkingServiceImpl.java b/src/main/java/dev/wms/pwrapi/service/parking/ParkingServiceImpl.java index de95264..c87220b 100644 --- a/src/main/java/dev/wms/pwrapi/service/parking/ParkingServiceImpl.java +++ b/src/main/java/dev/wms/pwrapi/service/parking/ParkingServiceImpl.java @@ -7,29 +7,26 @@ import dev.wms.pwrapi.dto.parking.Parking; import dev.wms.pwrapi.dto.parking.ParkingWithHistory; +import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import dev.wms.pwrapi.dao.parking.ParkingDAO; @Service +@AllArgsConstructor public class ParkingServiceImpl implements ParkingService { - private ParkingDAO parkingDAO; - - @Autowired - public ParkingServiceImpl(ParkingDAO parkingDAO){ - this.parkingDAO = parkingDAO; - } + private ParkingProxy parkingProxy; @Override public List getParkingData() throws JsonProcessingException, IOException{ - return parkingDAO.getProcessedParkingInfo(); + return parkingProxy.getParkingState(); } @Override public List getRawParkingData() throws IOException{ - return parkingDAO.getRawParkingData(); + return parkingProxy.getParkingWithHistory(); } } diff --git a/src/test/java/dev/wms/pwrapi/parking/ParkingProxyTest.java b/src/test/java/dev/wms/pwrapi/parking/ParkingProxyTest.java new file mode 100644 index 0000000..702889d --- /dev/null +++ b/src/test/java/dev/wms/pwrapi/parking/ParkingProxyTest.java @@ -0,0 +1,37 @@ +package dev.wms.pwrapi.parking; + +import dev.wms.pwrapi.dto.parking.Parking; +import dev.wms.pwrapi.dto.parking.ParkingWithHistory; +import dev.wms.pwrapi.service.parking.ParkingProxy; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest +public class ParkingProxyTest { + + @Autowired + private ParkingProxy parkingProxy; + + @Test + public void parkingProxyShouldntUpdateDataForOneMinute() throws IOException { + List result = parkingProxy.getParkingState(); + for(int i = 0; i < 10; i++){ + assertEquals(result.get(0).getLastUpdate(), parkingProxy.getParkingState().get(0).getLastUpdate()); + } + List resultWithHistory = parkingProxy.getParkingWithHistory(); + for(int i = 0; i < 10; i++){ + assertEquals(resultWithHistory.get(0).getLastUpdate(), parkingProxy.getParkingWithHistory().get(0).getLastUpdate()); + } + + } + + + + +}