Skip to content

Commit 66fad7c

Browse files
committed
[feat] 날씨 정보 조회가 가능한 시간 조회 기능 추가
1 parent 2248472 commit 66fad7c

File tree

4 files changed

+45
-5
lines changed

4 files changed

+45
-5
lines changed

src/main/java/nambang_swag/bada_on/controller/WeatherController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.swagger.v3.oas.annotations.Parameter;
1313
import io.swagger.v3.oas.annotations.tags.Tag;
1414
import lombok.RequiredArgsConstructor;
15+
import nambang_swag.bada_on.response.AvailableTime;
1516
import nambang_swag.bada_on.response.WeatherDetail;
1617
import nambang_swag.bada_on.response.WeatherSummary;
1718
import nambang_swag.bada_on.service.WeatherService;
@@ -43,4 +44,13 @@ public ResponseEntity<List<WeatherDetail>> getWeatherDetails(
4344
Long id) {
4445
return ResponseEntity.ok().body(weatherService.getWeatherDetail(id));
4546
}
47+
48+
@Operation(summary = "조회 가능한 시간 조회", description = "날씨 조회가 가능한 시간 조회")
49+
@GetMapping("/available")
50+
public ResponseEntity<List<AvailableTime>> getAvailableTime(
51+
@RequestParam("date") Integer date,
52+
@RequestParam("hour") Integer hour
53+
) {
54+
return ResponseEntity.ok(weatherService.getAvailableTime(date, hour));
55+
}
4656
}

src/main/java/nambang_swag/bada_on/repository/WeatherRepository.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ public interface WeatherRepository extends JpaRepository<Weather, Integer> {
1717
@Query("SELECT w FROM Weather w WHERE w.place.id = :placeId AND w.date >= :date")
1818
List<Weather> findWeatherByPlaceIdWithDateGreaterThan(@Param("placeId") Long placeId, @Param("date") int date);
1919

20-
@Query("SELECT w FROM Weather w WHERE w.place.id = :placeId AND w.date >= :date AND w.time >= :time")
21-
List<Weather> getWetherForDetails(@Param("placeId") Long placeId, @Param("date") int date,
22-
@Param("time") int time);
23-
20+
@Query("SELECT w FROM Weather w WHERE w.date > :date OR (w.date = :date AND w.time >= :time) AND w.isUpdated = true")
21+
List<Weather> getWeatherIsUpdated(@Param("date") int date, @Param("time") int time);
2422
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package nambang_swag.bada_on.response;
2+
3+
import java.util.List;
4+
5+
import lombok.Getter;
6+
7+
@Getter
8+
public class AvailableTime {
9+
private int date;
10+
private List<Integer> hours;
11+
12+
public AvailableTime(int date, List<Integer> hours) {
13+
this.date = date;
14+
this.hours = hours;
15+
}
16+
}

src/main/java/nambang_swag/bada_on/service/WeatherService.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.util.ArrayList;
77
import java.util.Comparator;
88
import java.util.List;
9+
import java.util.Map;
10+
import java.util.stream.Collectors;
911

1012
import org.springframework.stereotype.Service;
1113
import org.springframework.transaction.annotation.Transactional;
@@ -21,10 +23,10 @@
2123
import nambang_swag.bada_on.entity.TideRecord;
2224
import nambang_swag.bada_on.entity.Weather;
2325
import nambang_swag.bada_on.exception.PlaceNotFound;
24-
import nambang_swag.bada_on.exception.WeatherNotFound;
2526
import nambang_swag.bada_on.repository.PlaceRepository;
2627
import nambang_swag.bada_on.repository.TideRepository;
2728
import nambang_swag.bada_on.repository.WeatherRepository;
29+
import nambang_swag.bada_on.response.AvailableTime;
2830
import nambang_swag.bada_on.response.WeatherDetail;
2931
import nambang_swag.bada_on.response.WeatherSummary;
3032

@@ -585,5 +587,19 @@ private int calculateTidePercentage(List<TideRecord> tideRecords) {
585587
return 0; // 범위 밖의 시간인 경우
586588
}
587589

590+
public List<AvailableTime> getAvailableTime(Integer date, Integer hour) {
591+
return weatherRepository.getWeatherIsUpdated(date, hour * 100).stream()
592+
.collect(Collectors.groupingBy(
593+
Weather::getDate,
594+
Collectors.mapping(weather -> weather.getTime() / 100, Collectors.toSet()) // Remove duplicates
595+
))
596+
.entrySet().stream()
597+
.sorted(Map.Entry.comparingByKey())
598+
.map(entry -> new AvailableTime(
599+
entry.getKey(),
600+
entry.getValue().stream().sorted().toList()
601+
))
602+
.toList();
603+
}
588604
}
589605

0 commit comments

Comments
 (0)