From fb896e29c9de42511f4f3497580887e745acbdf9 Mon Sep 17 00:00:00 2001 From: Youngho Date: Thu, 18 Apr 2024 00:32:45 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=A3=BC=EC=B0=A8=EC=9E=A5=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=20=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=20ser?= =?UTF-8?q?vice=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/service/ParkingService.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 app-scheduler/src/main/java/com/parkingcomestrue/external/service/ParkingService.java diff --git a/app-scheduler/src/main/java/com/parkingcomestrue/external/service/ParkingService.java b/app-scheduler/src/main/java/com/parkingcomestrue/external/service/ParkingService.java new file mode 100644 index 00000000..9229691d --- /dev/null +++ b/app-scheduler/src/main/java/com/parkingcomestrue/external/service/ParkingService.java @@ -0,0 +1,35 @@ +package com.parkingcomestrue.external.service; + +import com.parkingcomestrue.common.domain.parking.Parking; +import com.parkingcomestrue.common.domain.parking.repository.ParkingRepository; +import java.util.List; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class ParkingService { + + private final ParkingRepository parkingRepository; + + @Transactional + public void updateParkingLots(Map parkingLots, Map saved, + List newParkingLots) { + updateSavedParkingLots(parkingLots, saved); + saveNewParkingLots(newParkingLots); + } + + private void updateSavedParkingLots(Map parkingLots, Map saved) { + for (String parkingName : saved.keySet()) { + Parking origin = saved.get(parkingName); + Parking updated = parkingLots.get(parkingName); + origin.update(updated); + } + } + + private void saveNewParkingLots(List newParkingLots) { + parkingRepository.saveAll(newParkingLots); + } +} From fe749dc1752316ba6f8806ea30f66c8caaa211c9 Mon Sep 17 00:00:00 2001 From: Youngho Date: Thu, 18 Apr 2024 00:32:53 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=A3=BC=EC=B0=A8=EC=9E=A5=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=8B=9C=20=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=A1=9C=20=EB=AC=B6=EA=B8=B0=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?parkingService=20=EC=9D=98=EC=A1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/ParkingUpdateScheduler.java | 27 ++++++++----------- .../scheduler/ParkingUpdateSchedulerTest.java | 13 ++++++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app-scheduler/src/main/java/com/parkingcomestrue/external/scheduler/ParkingUpdateScheduler.java b/app-scheduler/src/main/java/com/parkingcomestrue/external/scheduler/ParkingUpdateScheduler.java index 3473afb4..0363d6f9 100644 --- a/app-scheduler/src/main/java/com/parkingcomestrue/external/scheduler/ParkingUpdateScheduler.java +++ b/app-scheduler/src/main/java/com/parkingcomestrue/external/scheduler/ParkingUpdateScheduler.java @@ -1,10 +1,11 @@ package com.parkingcomestrue.external.scheduler; -import com.parkingcomestrue.external.coordinate.CoordinateApiService; -import com.parkingcomestrue.external.parkingapi.ParkingApiService; import com.parkingcomestrue.common.domain.parking.Location; import com.parkingcomestrue.common.domain.parking.Parking; import com.parkingcomestrue.common.domain.parking.repository.ParkingRepository; +import com.parkingcomestrue.external.coordinate.CoordinateApiService; +import com.parkingcomestrue.external.parkingapi.ParkingApiService; +import com.parkingcomestrue.external.service.ParkingService; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -28,13 +29,14 @@ public class ParkingUpdateScheduler { private final List parkingApiServices; private final CoordinateApiService coordinateApiService; private final ParkingRepository parkingRepository; + private final ParkingService parkingService; @Scheduled(cron = "0 */30 * * * *") public void autoUpdateOfferCurrentParking() { Map parkingLots = readBy(ParkingApiService::offerCurrentParking); Map saved = findAllByName(parkingLots.keySet()); - updateSavedParkingLots(parkingLots, saved); - saveNewParkingLots(parkingLots, saved); + List newParkingLots = findNewParkingLots(parkingLots, saved); + parkingService.updateParkingLots(parkingLots, saved, newParkingLots); } private Map readBy(Predicate currentParkingAvailable) { @@ -68,24 +70,17 @@ private Map findAllByName(Set names) { .collect(toParkingMap()); } - private void updateSavedParkingLots(Map parkingLots, Map saved) { - for (String parkingName : saved.keySet()) { - Parking origin = saved.get(parkingName); - Parking updated = parkingLots.get(parkingName); - origin.update(updated); - } - } - - private void saveNewParkingLots(Map parkingLots, Map saved) { + private List findNewParkingLots(Map parkingLots, Map saved) { List newParkingLots = parkingLots.keySet() .stream() .filter(parkingName -> !saved.containsKey(parkingName)) .map(parkingLots::get) .toList(); updateLocation(newParkingLots); - parkingRepository.saveAll(newParkingLots); + return newParkingLots; } + private void updateLocation(List newParkingLots) { for (Parking parking : newParkingLots) { Location locationByAddress = coordinateApiService.extractLocationByAddress( @@ -99,7 +94,7 @@ private void updateLocation(List newParkingLots) { public void autoUpdateNotOfferCurrentParking() { Map parkingLots = readBy(parkingApiService -> !parkingApiService.offerCurrentParking()); Map saved = findAllByName(parkingLots.keySet()); - updateSavedParkingLots(parkingLots, saved); - saveNewParkingLots(parkingLots, saved); + List newParkingLots = findNewParkingLots(parkingLots, saved); + parkingService.updateParkingLots(parkingLots, saved, newParkingLots); } } diff --git a/app-scheduler/src/test/java/com/parkingcomestrue/external/scheduler/ParkingUpdateSchedulerTest.java b/app-scheduler/src/test/java/com/parkingcomestrue/external/scheduler/ParkingUpdateSchedulerTest.java index ba9a9ff1..f7e13b8a 100644 --- a/app-scheduler/src/test/java/com/parkingcomestrue/external/scheduler/ParkingUpdateSchedulerTest.java +++ b/app-scheduler/src/test/java/com/parkingcomestrue/external/scheduler/ParkingUpdateSchedulerTest.java @@ -2,6 +2,7 @@ import com.parkingcomestrue.external.coordinate.CoordinateApiService; +import com.parkingcomestrue.external.service.ParkingService; import com.parkingcomestrue.fake.ExceptionParkingApiService; import com.parkingcomestrue.fake.FakeCoordinateApiService; import com.parkingcomestrue.fake.NotOfferCurrentParkingApiService; @@ -29,7 +30,8 @@ void autoUpdateOfferCurrentParking() { ParkingUpdateScheduler scheduler = new ParkingUpdateScheduler( List.of(offerCurrentParkingApiService), coordinateService, - parkingRepository + parkingRepository, + new ParkingService(parkingRepository) ); //when @@ -52,7 +54,8 @@ void autoUpdateNotOfferCurrentParking() { ParkingUpdateScheduler scheduler = new ParkingUpdateScheduler( List.of(notOfferCurrentParkingApiService), coordinateService, - parkingRepository + parkingRepository, + new ParkingService(parkingRepository) ); //when @@ -76,7 +79,8 @@ void notAffectBetweenOfferAndNotOfferCurrentParking() { ParkingUpdateScheduler scheduler = new ParkingUpdateScheduler( List.of(offerCurrentParkingApiService, notOfferCurrentParkingApiService), coordinateService, - parkingRepository + parkingRepository, + new ParkingService(parkingRepository) ); //when @@ -93,7 +97,8 @@ void autoUpdateWithExceptionApi() { ParkingUpdateScheduler scheduler = new ParkingUpdateScheduler( List.of(new OfferCurrentParkingApiService(5), new ExceptionParkingApiService()), coordinateService, - parkingRepository + parkingRepository, + new ParkingService(parkingRepository) ); //when