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/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); + } +} 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