diff --git a/README.md b/README.md index 8504ba7..fbb9cf6 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,10 @@ To run the service in a kubernetes cluster (with hot reloading): ### Sample Requests To make a request for all competitions: ```shell script -curl -X GET -H "Content-Type: application/json" localhost:8080/calendar +curl -X GET -H "Content-Type: application/json" localhost:8080/calendar?leagueId=388 ``` +Note that the leagueId can be obtained by inspecting the network requests on the [IFSC Competitions page](https://www.ifsc-climbing.org/index.php/world-competition). + ## License This project uses the following license: [MIT](LICENSE.md). diff --git a/src/main/java/com/jrmcdonald/ifsc/controller/CalendarController.java b/src/main/java/com/jrmcdonald/ifsc/controller/CalendarController.java index 12e9d03..45d5596 100644 --- a/src/main/java/com/jrmcdonald/ifsc/controller/CalendarController.java +++ b/src/main/java/com/jrmcdonald/ifsc/controller/CalendarController.java @@ -5,6 +5,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; @@ -18,8 +19,8 @@ public class CalendarController { private final CalendarService calendarService; @GetMapping(produces = "text/calendar") - public Mono> getCalendar() { - return calendarService.createCalendar().map(ResponseEntity::ok); + public Mono> getCalendar(@RequestParam("leagueId") String leagueId) { + return calendarService.createCalendar(leagueId).map(ResponseEntity::ok); } } diff --git a/src/main/java/com/jrmcdonald/ifsc/service/calendar/CalendarService.java b/src/main/java/com/jrmcdonald/ifsc/service/calendar/CalendarService.java index 0712627..574183b 100644 --- a/src/main/java/com/jrmcdonald/ifsc/service/calendar/CalendarService.java +++ b/src/main/java/com/jrmcdonald/ifsc/service/calendar/CalendarService.java @@ -3,5 +3,5 @@ import reactor.core.publisher.Mono; public interface CalendarService { - Mono createCalendar(); + Mono createCalendar(String leagueId); } diff --git a/src/main/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarService.java b/src/main/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarService.java index bc4766f..bbcf6ce 100644 --- a/src/main/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarService.java +++ b/src/main/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarService.java @@ -25,8 +25,8 @@ public class InternetCalendarService implements CalendarService { private final CompetitionsService competitionsService; @Override - public Mono createCalendar() { - return competitionsService.findAll() + public Mono createCalendar(String leagueId) { + return competitionsService.findAll(leagueId) .flatMap(competitions -> Mono.just(competitions.getEvents())) .flatMap(this::mapEventsToCalendar) .doFinally(calendar -> log.info("Created calendar for all categories")); diff --git a/src/main/java/com/jrmcdonald/ifsc/service/competitions/CompetitionsService.java b/src/main/java/com/jrmcdonald/ifsc/service/competitions/CompetitionsService.java index 8f7f605..ef3e975 100644 --- a/src/main/java/com/jrmcdonald/ifsc/service/competitions/CompetitionsService.java +++ b/src/main/java/com/jrmcdonald/ifsc/service/competitions/CompetitionsService.java @@ -5,5 +5,5 @@ import reactor.core.publisher.Mono; public interface CompetitionsService { - Mono findAll(); + Mono findAll(String leagueId); } diff --git a/src/main/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsService.java b/src/main/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsService.java index 4e2db75..c27102c 100644 --- a/src/main/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsService.java +++ b/src/main/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsService.java @@ -25,9 +25,12 @@ public IfscCompetitionsService(IfscCompetitionsConfig config) { } @Override - public Mono findAll() { + public Mono findAll(String leagueId) { return webClient.get() - .uri("/results-api.php?api=season_leagues_calendar&league=388") + .uri(uriBuilder -> uriBuilder.path("/results-api.php") + .queryParam("api", "season_leagues_calendar") + .queryParam("league", leagueId) + .build()) .retrieve() .bodyToMono(CompetitionList.class); } diff --git a/src/test/java/com/jrmcdonald/ifsc/controller/CalendarControllerTest.java b/src/test/java/com/jrmcdonald/ifsc/controller/CalendarControllerTest.java index 8bbba10..2633f92 100644 --- a/src/test/java/com/jrmcdonald/ifsc/controller/CalendarControllerTest.java +++ b/src/test/java/com/jrmcdonald/ifsc/controller/CalendarControllerTest.java @@ -43,10 +43,10 @@ void afterEach() { void shouldExecuteService() { String expectedValue = "ICALENDAR_VALUE"; - when(calendarService.createCalendar()).thenReturn(Mono.just(expectedValue)); + when(calendarService.createCalendar("388")).thenReturn(Mono.just(expectedValue)); FluxExchangeResult exchangeResult = client.get() - .uri("/calendar") + .uri("/calendar?leagueId=388") .exchange() .expectHeader() .contentType("text/calendar;charset=UTF-8") @@ -56,6 +56,6 @@ void shouldExecuteService() { .assertNext(result -> assertThat(result).isEqualTo(expectedValue)) .verifyComplete(); - verify(calendarService).createCalendar(); + verify(calendarService).createCalendar("388"); } } \ No newline at end of file diff --git a/src/test/java/com/jrmcdonald/ifsc/functional/FunctionalTest.java b/src/test/java/com/jrmcdonald/ifsc/functional/FunctionalTest.java index 46405ef..ec0b948 100644 --- a/src/test/java/com/jrmcdonald/ifsc/functional/FunctionalTest.java +++ b/src/test/java/com/jrmcdonald/ifsc/functional/FunctionalTest.java @@ -54,7 +54,7 @@ void shouldExecuteSuccessfully(MockWebServerWrapper wrapper) throws IOException .setBody(Files.readString(Paths.get("src/test/resources/data/ifscResponseInput.json")))); client.get() - .uri("/calendar") + .uri("/calendar?leagueId=388") .exchange() .expectHeader() .contentType("text/calendar;charset=UTF-8") diff --git a/src/test/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarServiceTest.java b/src/test/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarServiceTest.java index 27021ea..ba32cbe 100644 --- a/src/test/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarServiceTest.java +++ b/src/test/java/com/jrmcdonald/ifsc/service/calendar/InternetCalendarServiceTest.java @@ -56,9 +56,9 @@ void shouldCreateCalendar() { Competition cliffhanger = new Competition("Cliffhanger", epoch, epoch); Competition olympics = new Competition("Olympics", epochPlusOne, epochPlusOne); - when(competitionsService.findAll()).thenReturn(Mono.just(new CompetitionList(asList(cliffhanger, olympics)))); + when(competitionsService.findAll("388")).thenReturn(Mono.just(new CompetitionList(asList(cliffhanger, olympics)))); - Mono calendarMono = calendarService.createCalendar(); + Mono calendarMono = calendarService.createCalendar("388"); StepVerifier.create(calendarMono) .assertNext(calendarString -> { diff --git a/src/test/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsServiceTest.java b/src/test/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsServiceTest.java index 3a77638..984f67b 100644 --- a/src/test/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsServiceTest.java +++ b/src/test/java/com/jrmcdonald/ifsc/service/competitions/IfscCompetitionsServiceTest.java @@ -56,7 +56,7 @@ void shouldReturnCompetitions() throws Exception { .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .setBody(Files.readString(Paths.get("src/test/resources/data/ifscResponseInput.json")))); - StepVerifier.create(service.findAll()) + StepVerifier.create(service.findAll("388")) .assertNext(competitionList -> { assertThat(competitionList.getEvents()).hasSize(3);