Skip to content

Commit 7a9d350

Browse files
committed
✨ Add: Batch end-point, Hourly weather query
1 parent afb0317 commit 7a9d350

File tree

5 files changed

+153
-135
lines changed

5 files changed

+153
-135
lines changed

http/API-TEST.http

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,12 @@ POST http://localhost:8080/api/snow-maker/{{resortId}}/vote?isPositive=true
2121

2222
### 혼잡도 조회
2323
GET http://localhost:8080/api/congestion/{{resortId}}
24+
25+
### 현재 날씨 Batch
26+
GET http://localhost:8080/batch/current-weather
27+
28+
### 주간 날씨 Batch
29+
GET http://localhost:8080/batch/weekly-weather
30+
31+
### 시간별 날씨 Batch
32+
GET http://localhost:8080/batch/hourly-weather

init.sql

Lines changed: 117 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
1-
CREATE
2-
USER IF NOT EXISTS 'master'@'%' IDENTIFIED BY 'master';
3-
GRANT ALL PRIVILEGES ON *.* TO
4-
'master'@'%';
5-
FLUSH
6-
PRIVILEGES;
1+
CREATE USER IF NOT EXISTS 'master'@'%' IDENTIFIED BY 'master';
2+
GRANT ALL PRIVILEGES ON *.* TO 'master'@'%';
3+
FLUSH PRIVILEGES;
74

8-
CREATE
9-
DATABASE IF NOT EXISTS ski_db;
5+
CREATE DATABASE IF NOT EXISTS ski_db;
106

11-
USE
12-
ski_db;
7+
USE ski_db;
138

149
DROP TABLE IF EXISTS current_weather;
1510
DROP TABLE IF EXISTS daily_weather;
1611
DROP TABLE IF EXISTS hourly_weather;
1712
DROP TABLE IF EXISTS snow_quality_votes;
13+
DROP TABLE IF EXISTS congestion;
1814
DROP TABLE IF EXISTS webcams;
1915
DROP TABLE IF EXISTS slopes;
2016
DROP TABLE IF EXISTS ski_resorts;
@@ -150,118 +146,6 @@ CREATE TABLE congestion
150146
FOREIGN KEY (resort_id) REFERENCES ski_resorts (resort_id)
151147
);
152148

153-
INSERT INTO congestion (resort_id, congestion, description, time)
154-
VALUES (1, 1, '여유', '오전 8시'),
155-
(1, 3, '혼잡', '오전 10시'),
156-
(1, 1, '여유', '오후 12시'),
157-
(1, 3, '혼잡', '오후 2시'),
158-
(1, 1, '여유', '오후 4시'),
159-
(1, 3, '혼잡', '오후 6시'),
160-
(1, 1, '여유', '오후 8시'),
161-
(1, 3, '혼잡', '오후 10시'),
162-
(1, 4, '매우 혼잡', '오전 12시'),
163-
(1, 4, '매우 혼잡', '오전 2시'),
164-
(2, 1, '여유', '오전 8시'),
165-
(2, 3, '혼잡', '오전 10시'),
166-
(2, 1, '여유', '오후 12시'),
167-
(2, 3, '혼잡', '오후 2시'),
168-
(2, 1, '여유', '오후 4시'),
169-
(2, 3, '혼잡', '오후 6시'),
170-
(2, 1, '여유', '오후 8시'),
171-
(2, 3, '혼잡', '오후 10시'),
172-
(2, 4, '매우 혼잡', '오전 12시'),
173-
(2, 4, '매우 혼잡', '오전 2시'),
174-
(3, 1, '여유', '오전 8시'),
175-
(3, 3, '혼잡', '오전 10시'),
176-
(3, 1, '여유', '오후 12시'),
177-
(3, 3, '혼잡', '오후 2시'),
178-
(3, 1, '여유', '오후 4시'),
179-
(3, 3, '혼잡', '오후 6시'),
180-
(3, 1, '여유', '오후 8시'),
181-
(3, 3, '혼잡', '오후 10시'),
182-
(3, 4, '매우 혼잡', '오전 12시'),
183-
(3, 4, '매우 혼잡', '오전 2시'),
184-
(4, 1, '여유', '오전 8시'),
185-
(4, 3, '혼잡', '오전 10시'),
186-
(4, 1, '여유', '오후 12시'),
187-
(4, 3, '혼잡', '오후 2시'),
188-
(4, 4, '매우 혼잡', '오후 4시'),
189-
(4, 4, '매우 혼잡', '오후 6시'),
190-
(4, 4, '매우 혼잡', '오후 8시'),
191-
(4, 4, '매우 혼잡', '오후 10시'),
192-
(4, 4, '매우 혼잡', '오전 12시'),
193-
(4, 4, '매우 혼잡', '오전 2시'),
194-
(5, 1, '여유', '오전 8시'),
195-
(5, 3, '혼잡', '오전 10시'),
196-
(5, 1, '여유', '오후 12시'),
197-
(5, 3, '혼잡', '오후 2시'),
198-
(5, 1, '여유', '오후 4시'),
199-
(5, 3, '혼잡', '오후 6시'),
200-
(5, 1, '여유', '오후 8시'),
201-
(5, 3, '혼잡', '오후 10시'),
202-
(5, 4, '매우 혼잡', '오전 12시'),
203-
(5, 4, '매우 혼잡', '오전 2시'),
204-
(6, 1, '여유', '오전 8시'),
205-
(6, 3, '혼잡', '오전 10시'),
206-
(6, 1, '여유', '오후 12시'),
207-
(6, 3, '혼잡', '오후 2시'),
208-
(6, 1, '여유', '오후 4시'),
209-
(6, 3, '혼잡', '오후 6시'),
210-
(6, 1, '여유', '오후 8시'),
211-
(6, 3, '혼잡', '오후 10시'),
212-
(6, 4, '매우 혼잡', '오전 12시'),
213-
(6, 3, '혼잡', '오전 2시'),
214-
(7, 1, '여유', '오전 8시'),
215-
(7, 3, '혼잡', '오전 10시'),
216-
(7, 1, '여유', '오후 12시'),
217-
(7, 3, '혼잡', '오후 2시'),
218-
(7, 1, '여유', '오후 4시'),
219-
(7, 3, '혼잡', '오후 6시'),
220-
(7, 1, '여유', '오후 8시'),
221-
(7, 3, '혼잡', '오후 10시'),
222-
(7, 4, '매우 혼잡', '오전 12시'),
223-
(7, 4, '매우 혼잡', '오전 2시'),
224-
(8, 1, '여유', '오전 8시'),
225-
(8, 3, '혼잡', '오전 10시'),
226-
(8, 1, '여유', '오후 12시'),
227-
(8, 3, '혼잡', '오후 2시'),
228-
(8, 1, '여유', '오후 4시'),
229-
(8, 3, '혼잡', '오후 6시'),
230-
(8, 1, '여유', '오후 8시'),
231-
(8, 3, '혼잡', '오후 10시'),
232-
(8, 4, '매우 혼잡', '오전 12시'),
233-
(8, 4, '매우 혼잡', '오전 2시'),
234-
(9, 1, '여유', '오전 8시'),
235-
(9, 3, '혼잡', '오전 10시'),
236-
(9, 1, '여유', '오후 12시'),
237-
(9, 3, '혼잡', '오후 2시'),
238-
(9, 1, '여유', '오후 4시'),
239-
(9, 3, '혼잡', '오후 6시'),
240-
(9, 1, '여유', '오후 8시'),
241-
(9, 3, '혼잡', '오후 10시'),
242-
(9, 4, '매우 혼잡', '오전 12시'),
243-
(9, 4, '매우 혼잡', '오전 2시'),
244-
(10, 1, '여유', '오전 8시'),
245-
(10, 3, '혼잡', '오전 10시'),
246-
(10, 1, '여유', '오후 12시'),
247-
(10, 3, '혼잡', '오후 2시'),
248-
(10, 1, '여유', '오후 4시'),
249-
(10, 3, '혼잡', '오후 6시'),
250-
(10, 1, '여유', '오후 8시'),
251-
(10, 3, '혼잡', '오후 10시'),
252-
(10, 4, '매우 혼잡', '오전 12시'),
253-
(10, 4, '매우 혼잡', '오전 2시'),
254-
(11, 1, '여유', '오전 8시'),
255-
(11, 3, '혼잡', '오전 10시'),
256-
(11, 1, '여유', '오후 12시'),
257-
(11, 3, '혼잡', '오후 2시'),
258-
(11, 1, '여유', '오후 4시'),
259-
(11, 3, '혼잡', '오후 6시'),
260-
(11, 1, '여유', '오후 8시'),
261-
(11, 3, '혼잡', '오후 10시'),
262-
(11, 4, '매우 혼잡', '오전 12시'),
263-
(11, 4, '매우 혼잡', '오전 2시');
264-
265149
-- 스키장 정보
266150
INSERT INTO ski_resorts (`name`, status, opening_date, closing_date, open_slopes, total_slopes, day_operating_hours,
267151
night_operating_hours, late_night_operating_hours, dawn_operating_hours,
@@ -639,15 +523,114 @@ VALUES (1, CURDATE(), '월요일', 10, 5, -2, '맑음', 0),
639523
(11, CURDATE() + INTERVAL 1 DAY, '화요일', 28, -6, -13, '안개', 1),
640524
(11, CURDATE() + INTERVAL 2 DAY, '수요일', 38, -7, -14, '흐림', 2);
641525

642-
INSERT INTO hourly_weather (resort_id, forecast_time, temperature, precipitation_chance, `condition`)
643-
VALUES (1, '2024-10-04 08:00:00', -2, 20, '맑음'),
644-
(1, '2024-10-04 10:00:00', 0, 30, '흐림'),
645-
(1, '2024-10-04 12:00:00', 2, 40, '흐리고 비'),
646-
(1, '2024-10-04 14:00:00', 0, 50, ''),
647-
(1, '2024-10-04 16:00:00', -2, 60, ''),
648-
(1, '2024-10-04 18:00:00', -4, 70, ''),
649-
(1, '2024-10-04 20:00:00', -6, 80, '흐림'),
650-
(1, '2024-10-04 22:00:00', -8, 90, '안개'),
651-
(1, '2024-10-05 00:00:00', -10, 80, '맑음'),
652-
(1, '2024-10-05 02:00:00', -12, 70, '맑음');
653-
526+
INSERT INTO congestion (resort_id, congestion, description, time)
527+
VALUES (1, 1, '여유', '오전 8시'),
528+
(1, 3, '혼잡', '오전 10시'),
529+
(1, 1, '여유', '오후 12시'),
530+
(1, 3, '혼잡', '오후 2시'),
531+
(1, 1, '여유', '오후 4시'),
532+
(1, 3, '혼잡', '오후 6시'),
533+
(1, 1, '여유', '오후 8시'),
534+
(1, 3, '혼잡', '오후 10시'),
535+
(1, 4, '매우 혼잡', '오전 12시'),
536+
(1, 4, '매우 혼잡', '오전 2시'),
537+
(2, 1, '여유', '오전 8시'),
538+
(2, 3, '혼잡', '오전 10시'),
539+
(2, 1, '여유', '오후 12시'),
540+
(2, 3, '혼잡', '오후 2시'),
541+
(2, 1, '여유', '오후 4시'),
542+
(2, 3, '혼잡', '오후 6시'),
543+
(2, 1, '여유', '오후 8시'),
544+
(2, 3, '혼잡', '오후 10시'),
545+
(2, 4, '매우 혼잡', '오전 12시'),
546+
(2, 4, '매우 혼잡', '오전 2시'),
547+
(3, 1, '여유', '오전 8시'),
548+
(3, 3, '혼잡', '오전 10시'),
549+
(3, 1, '여유', '오후 12시'),
550+
(3, 3, '혼잡', '오후 2시'),
551+
(3, 1, '여유', '오후 4시'),
552+
(3, 3, '혼잡', '오후 6시'),
553+
(3, 1, '여유', '오후 8시'),
554+
(3, 3, '혼잡', '오후 10시'),
555+
(3, 4, '매우 혼잡', '오전 12시'),
556+
(3, 4, '매우 혼잡', '오전 2시'),
557+
(4, 1, '여유', '오전 8시'),
558+
(4, 3, '혼잡', '오전 10시'),
559+
(4, 1, '여유', '오후 12시'),
560+
(4, 3, '혼잡', '오후 2시'),
561+
(4, 4, '매우 혼잡', '오후 4시'),
562+
(4, 4, '매우 혼잡', '오후 6시'),
563+
(4, 4, '매우 혼잡', '오후 8시'),
564+
(4, 4, '매우 혼잡', '오후 10시'),
565+
(4, 4, '매우 혼잡', '오전 12시'),
566+
(4, 4, '매우 혼잡', '오전 2시'),
567+
(5, 1, '여유', '오전 8시'),
568+
(5, 3, '혼잡', '오전 10시'),
569+
(5, 1, '여유', '오후 12시'),
570+
(5, 3, '혼잡', '오후 2시'),
571+
(5, 1, '여유', '오후 4시'),
572+
(5, 3, '혼잡', '오후 6시'),
573+
(5, 1, '여유', '오후 8시'),
574+
(5, 3, '혼잡', '오후 10시'),
575+
(5, 4, '매우 혼잡', '오전 12시'),
576+
(5, 4, '매우 혼잡', '오전 2시'),
577+
(6, 1, '여유', '오전 8시'),
578+
(6, 3, '혼잡', '오전 10시'),
579+
(6, 1, '여유', '오후 12시'),
580+
(6, 3, '혼잡', '오후 2시'),
581+
(6, 1, '여유', '오후 4시'),
582+
(6, 3, '혼잡', '오후 6시'),
583+
(6, 1, '여유', '오후 8시'),
584+
(6, 3, '혼잡', '오후 10시'),
585+
(6, 4, '매우 혼잡', '오전 12시'),
586+
(6, 3, '혼잡', '오전 2시'),
587+
(7, 1, '여유', '오전 8시'),
588+
(7, 3, '혼잡', '오전 10시'),
589+
(7, 1, '여유', '오후 12시'),
590+
(7, 3, '혼잡', '오후 2시'),
591+
(7, 1, '여유', '오후 4시'),
592+
(7, 3, '혼잡', '오후 6시'),
593+
(7, 1, '여유', '오후 8시'),
594+
(7, 3, '혼잡', '오후 10시'),
595+
(7, 4, '매우 혼잡', '오전 12시'),
596+
(7, 4, '매우 혼잡', '오전 2시'),
597+
(8, 1, '여유', '오전 8시'),
598+
(8, 3, '혼잡', '오전 10시'),
599+
(8, 1, '여유', '오후 12시'),
600+
(8, 3, '혼잡', '오후 2시'),
601+
(8, 1, '여유', '오후 4시'),
602+
(8, 3, '혼잡', '오후 6시'),
603+
(8, 1, '여유', '오후 8시'),
604+
(8, 3, '혼잡', '오후 10시'),
605+
(8, 4, '매우 혼잡', '오전 12시'),
606+
(8, 4, '매우 혼잡', '오전 2시'),
607+
(9, 1, '여유', '오전 8시'),
608+
(9, 3, '혼잡', '오전 10시'),
609+
(9, 1, '여유', '오후 12시'),
610+
(9, 3, '혼잡', '오후 2시'),
611+
(9, 1, '여유', '오후 4시'),
612+
(9, 3, '혼잡', '오후 6시'),
613+
(9, 1, '여유', '오후 8시'),
614+
(9, 3, '혼잡', '오후 10시'),
615+
(9, 4, '매우 혼잡', '오전 12시'),
616+
(9, 4, '매우 혼잡', '오전 2시'),
617+
(10, 1, '여유', '오전 8시'),
618+
(10, 3, '혼잡', '오전 10시'),
619+
(10, 1, '여유', '오후 12시'),
620+
(10, 3, '혼잡', '오후 2시'),
621+
(10, 1, '여유', '오후 4시'),
622+
(10, 3, '혼잡', '오후 6시'),
623+
(10, 1, '여유', '오후 8시'),
624+
(10, 3, '혼잡', '오후 10시'),
625+
(10, 4, '매우 혼잡', '오전 12시'),
626+
(10, 4, '매우 혼잡', '오전 2시'),
627+
(11, 1, '여유', '오전 8시'),
628+
(11, 3, '혼잡', '오전 10시'),
629+
(11, 1, '여유', '오후 12시'),
630+
(11, 3, '혼잡', '오후 2시'),
631+
(11, 1, '여유', '오후 4시'),
632+
(11, 3, '혼잡', '오후 6시'),
633+
(11, 1, '여유', '오후 8시'),
634+
(11, 3, '혼잡', '오후 10시'),
635+
(11, 4, '매우 혼잡', '오전 12시'),
636+
(11, 4, '매우 혼잡', '오전 2시');
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package nexters.weski.batch
2+
3+
import org.springframework.web.bind.annotation.GetMapping
4+
import org.springframework.web.bind.annotation.RestController
5+
6+
@RestController
7+
class WeatherBatchController(
8+
private val externalWeatherService: ExternalWeatherService
9+
) {
10+
11+
@GetMapping("/batch/current-weather")
12+
fun scheduleWeatherUpdate() {
13+
externalWeatherService.updateCurrentWeather()
14+
}
15+
16+
@GetMapping("/batch/weekly-weather")
17+
fun scheduledDailyWeatherUpdate() {
18+
externalWeatherService.updateDailyWeather()
19+
}
20+
21+
@GetMapping("/batch/hourly-weather")
22+
fun scheduledHourlyAndDailyUpdate() {
23+
externalWeatherService.updateHourlyAndDailyWeather()
24+
}
25+
}

src/main/kotlin/nexters/weski/weather/HourlyWeatherRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ import org.springframework.data.jpa.repository.JpaRepository
55

66
interface HourlyWeatherRepository : JpaRepository<HourlyWeather, Long> {
77
fun deleteBySkiResort(skiResort: SkiResort)
8+
fun findBySkiResortResortId(resortId: Long): List<HourlyWeather>
89
}

src/main/kotlin/nexters/weski/weather/WeatherService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class WeatherService(
1010
) {
1111
fun getWeatherByResortId(resortId: Long): WeatherDto? {
1212
val currentWeather = currentWeatherRepository.findBySkiResortResortId(resortId) ?: return null
13-
val hourlyWeather = hourlyWeatherRepository.findAll()
13+
val hourlyWeather = hourlyWeatherRepository.findBySkiResortResortId(resortId)
1414
val dailyWeather = dailyWeatherRepository.findAllBySkiResortResortId(resortId)
1515

1616
return WeatherDto.fromEntities(currentWeather, hourlyWeather, dailyWeather)

0 commit comments

Comments
 (0)