From 1bc50791a9928d4ea8d2a2ba30fc5d58a6f3efe9 Mon Sep 17 00:00:00 2001 From: Raja Kolli Date: Sun, 25 Jun 2023 16:27:27 +0000 Subject: [PATCH] adds junit and fixes parsing endpoint --- .../com/learning/mfscreener/service/NavService.java | 8 +++++--- .../learning/mfscreener/service/SchemeService.java | 2 ++ .../learning/mfscreener/utils/LocalDateUtility.java | 5 ----- .../com/learning/mfscreener/web/api/NAVApi.java | 3 ++- .../mfscreener/web/controllers/NAVController.java | 6 +++++- .../mfscreener/web/controllers/NavControllerIT.java | 13 +++++++++++++ 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/learning/mfscreener/service/NavService.java b/src/main/java/com/learning/mfscreener/service/NavService.java index af2a159..bcd30bc 100644 --- a/src/main/java/com/learning/mfscreener/service/NavService.java +++ b/src/main/java/com/learning/mfscreener/service/NavService.java @@ -16,7 +16,7 @@ @Service @RequiredArgsConstructor @Slf4j -@Transactional(readOnly = true) +@Transactional public class NavService { private final MFSchemeRepository mfSchemesRepository; @@ -24,6 +24,7 @@ public class NavService { private final SchemeService schemeService; @Loggable + @Transactional(readOnly = true) public MFSchemeDTO getNav(Long schemeCode) { return mfSchemesRepository .findBySchemeIdAndMfSchemeNavEntities_NavDate( @@ -32,8 +33,9 @@ public MFSchemeDTO getNav(Long schemeCode) { .orElseThrow(() -> new SchemeNotFoundException(String.format("Scheme %s Not Found", schemeCode))); } - public MFSchemeDTO getNavOnDate(Long schemeCode, String inputDate) { - LocalDate adjustedDate = LocalDateUtility.getAdjustedDateForNAV(inputDate); + @Loggable + public MFSchemeDTO getNavOnDate(Long schemeCode, LocalDate inputDate) { + LocalDate adjustedDate = LocalDateUtility.getAdjustedDate(inputDate); return getNavByDate(schemeCode, adjustedDate); } diff --git a/src/main/java/com/learning/mfscreener/service/SchemeService.java b/src/main/java/com/learning/mfscreener/service/SchemeService.java index fe8c861..d28ef22 100644 --- a/src/main/java/com/learning/mfscreener/service/SchemeService.java +++ b/src/main/java/com/learning/mfscreener/service/SchemeService.java @@ -1,6 +1,7 @@ package com.learning.mfscreener.service; import com.learning.mfscreener.adapter.ConversionServiceAdapter; +import com.learning.mfscreener.config.logging.Loggable; import com.learning.mfscreener.entities.MFSchemeEntity; import com.learning.mfscreener.entities.MFSchemeNavEntity; import com.learning.mfscreener.entities.MFSchemeTypeEntity; @@ -32,6 +33,7 @@ public class SchemeService { private final MFSchemeTypeRepository mfSchemeTypeRepository; private final ConversionServiceAdapter conversionServiceAdapter; + @Loggable void fetchSchemeDetails(Long schemeCode) { log.info("Fetching SchemeDetails for AMFISchemeCode :{} ", schemeCode); URI uri = UriComponentsBuilder.fromHttpUrl(AppConstants.MFAPI_WEBSITE_BASE_URL + schemeCode) diff --git a/src/main/java/com/learning/mfscreener/utils/LocalDateUtility.java b/src/main/java/com/learning/mfscreener/utils/LocalDateUtility.java index cf236e9..8100439 100644 --- a/src/main/java/com/learning/mfscreener/utils/LocalDateUtility.java +++ b/src/main/java/com/learning/mfscreener/utils/LocalDateUtility.java @@ -14,9 +14,4 @@ public LocalDate getAdjustedDate(LocalDate adjustedDate) { } return adjustedDate; } - - public LocalDate getAdjustedDateForNAV(String inputDate) { - LocalDate adjustedDate = LocalDate.parse(inputDate, AppConstants.FORMATTER); - return getAdjustedDate(adjustedDate); - } } diff --git a/src/main/java/com/learning/mfscreener/web/api/NAVApi.java b/src/main/java/com/learning/mfscreener/web/api/NAVApi.java index 1333419..a63a8b9 100644 --- a/src/main/java/com/learning/mfscreener/web/api/NAVApi.java +++ b/src/main/java/com/learning/mfscreener/web/api/NAVApi.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; +import java.time.LocalDate; import org.springframework.http.ResponseEntity; public interface NAVApi { @@ -21,5 +22,5 @@ ResponseEntity getScheme( public ResponseEntity getSchemeNavOnDate( @Parameter(description = "scheme Code for mutual fund", in = ParameterIn.PATH, example = "120503") Long schemeCode, - @Parameter(description = "date", in = ParameterIn.PATH, example = "20-01-2020") String date); + @Parameter(description = "date", in = ParameterIn.PATH, example = "2020-20-01") LocalDate date); } diff --git a/src/main/java/com/learning/mfscreener/web/controllers/NAVController.java b/src/main/java/com/learning/mfscreener/web/controllers/NAVController.java index 155eb46..e8d34cf 100644 --- a/src/main/java/com/learning/mfscreener/web/controllers/NAVController.java +++ b/src/main/java/com/learning/mfscreener/web/controllers/NAVController.java @@ -3,7 +3,9 @@ import com.learning.mfscreener.models.MFSchemeDTO; import com.learning.mfscreener.service.NavService; import com.learning.mfscreener.web.api.NAVApi; +import java.time.LocalDate; import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -24,7 +26,9 @@ public ResponseEntity getScheme(@PathVariable(value = "schemeCode") @Override @GetMapping(path = "/{schemeCode}/{date}") - public ResponseEntity getSchemeNavOnDate(Long schemeCode, String date) { + public ResponseEntity getSchemeNavOnDate( + @PathVariable Long schemeCode, + @PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) { return ResponseEntity.ok(navService.getNavOnDate(schemeCode, date)); } } diff --git a/src/test/java/com/learning/mfscreener/web/controllers/NavControllerIT.java b/src/test/java/com/learning/mfscreener/web/controllers/NavControllerIT.java index b15b285..9c29d7a 100644 --- a/src/test/java/com/learning/mfscreener/web/controllers/NavControllerIT.java +++ b/src/test/java/com/learning/mfscreener/web/controllers/NavControllerIT.java @@ -37,4 +37,17 @@ void shouldLoadDataWhenSchemeFound() throws Exception { .andExpect(jsonPath("$.nav", notNullValue(String.class))) .andExpect(jsonPath("$.date", notNullValue(String.class))); } + + @Test + void shouldLoadDataWhenSchemeFoundAndLoadHistoricalData() throws Exception { + this.mockMvc + .perform(get("/api/nav/{schemeCode}/{date}", 120503L, "2022-12-20")) + .andExpect(status().isOk()) + .andExpect(header().string("Content-Type", is("application/json"))) + .andExpect(jsonPath("$.schemeCode", is(120503L), Long.class)) + .andExpect(jsonPath("$.payout", is("INF846K01EW2"))) + .andExpect(jsonPath("$.schemeName", is("Axis Long Term Equity Fund - Direct Plan - Growth Option"))) + .andExpect(jsonPath("$.nav", is("77.6483"))) + .andExpect(jsonPath("$.date", is("2023-06-23"))); + } }