Skip to content

Commit

Permalink
fix cache issue and bulk insert
Browse files Browse the repository at this point in the history
  • Loading branch information
rajadilipkolli committed Apr 29, 2024
1 parent 5998a3c commit f47c8c4
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public interface MFSchemeRepository extends JpaRepository<MFSchemeEntity, Long>

@EntityGraph(attributePaths = {"mfSchemeTypeEntity", "mfSchemeNavEntities"})
@Transactional(readOnly = true)
@Cacheable("bySchemeIdAndSchemeNav")
@Cacheable(value = "bySchemeIdAndSchemeNav", unless = "#result == null || #result.isEmpty()")
Optional<MFSchemeEntity> findBySchemeIdAndMfSchemeNavEntities_NavDate(
@Param("schemeCode") Long schemeCode, @Param("date") LocalDate navDate);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,9 @@ String fetchAndProcessNavData(
}

String parseNavData(
Reader inputString, String payOut, boolean persistSchemeInfo, Long schemeCode, LocalDate navDate) {
Reader inputString, String isin, boolean persistSchemeInfo, Long schemeCode, LocalDate navDate) {
String oldSchemeId = null;
List<SchemeData> schemeDataList = new ArrayList<>();
try (BufferedReader br = new BufferedReader(inputString)) {
String lineValue = br.readLine();
for (int i = 0; i < 2; ++i) {
Expand All @@ -116,36 +117,52 @@ String parseNavData(
} else {
amc = tempVal;
oldSchemeId = handleMultipleTokenLine(
payOut,
isin,
persistSchemeInfo,
tokenize,
oldSchemeId,
amc,
schemeType,
schemeCode,
insertEachRow);
insertEachRow,
schemeDataList);
}

} else {
oldSchemeId = handleMultipleTokenLine(
payOut,
isin,
persistSchemeInfo,
tokenize,
oldSchemeId,
amc,
schemeType,
schemeCode,
insertEachRow);
insertEachRow,
schemeDataList);
}
lineValue = readNextNonEmptyLine(br);
}
} catch (IOException e) {
LOGGER.error("Exception Occurred while reading response", e);
throw new NavNotFoundException("Unable to parse for %s".formatted(schemeCode), navDate);
}
if (!schemeDataList.isEmpty()) {
persistSchemeInfoBulk(schemeDataList);
}
return oldSchemeId;
}

void persistSchemeInfoBulk(List<SchemeData> schemeDataList) {
List<MFSchemeEntity> entitiesToPersist = new ArrayList<>();
for (SchemeData schemeData : schemeDataList) {
String[] tokenize = schemeData.tokenize();
MFSchemeEntity entity = createSchemeDTO(tokenize, schemeData.amc(), schemeData.schemeType());
entitiesToPersist.add(entity);
}
schemeService.saveAllEntities(entitiesToPersist);
LOGGER.debug("Persisted Entities: {}", entitiesToPersist.size());
}

String readNextNonEmptyLine(BufferedReader br) throws IOException {
String lineValue = br.readLine();
while (lineValue != null && !StringUtils.hasText(lineValue)) {
Expand All @@ -155,35 +172,32 @@ String readNextNonEmptyLine(BufferedReader br) throws IOException {
}

String handleMultipleTokenLine(
String payOut,
String isin,
boolean persistSchemeInfo,
String[] tokenize,
String oldSchemeId,
String amc,
String schemeType,
Long inputSchemeCode,
boolean insertEachRow) {
boolean insertEachRow,
List<SchemeData> schemeDataList) {
final Long schemeCode = Long.valueOf(tokenize[0]);
final String payout = tokenize[2];
if (insertEachRow) {
persistSchemeInfo(tokenize, amc, schemeType, schemeCode, payout);
} else if (payout.equalsIgnoreCase(payOut) || schemeCode.equals(inputSchemeCode)) {
schemeDataList.add(new SchemeData(tokenize, amc, schemeType));
} else if (payout.equalsIgnoreCase(isin) || schemeCode.equals(inputSchemeCode)) {
oldSchemeId = String.valueOf(schemeCode);
if (persistSchemeInfo) {
persistSchemeInfo(tokenize, amc, schemeType, schemeCode, payout);
schemeDataList.add(new SchemeData(tokenize, amc, schemeType));
}
}
return oldSchemeId;
}

void persistSchemeInfo(String[] tokenize, String amc, String schemeType, Long schemeCode, String payout) {
MFSchemeEntity mfSchemeEntity = createSchemeDTO(tokenize, amc, schemeType, schemeCode, payout);
MFSchemeEntity persistedScheme = schemeService.saveEntity(mfSchemeEntity);
LOGGER.debug("Persisted Entity :{}", persistedScheme);
}

MFSchemeEntity createSchemeDTO(String[] tokenize, String amc, String schemeType, Long schemeCode, String payout) {
MFSchemeEntity createSchemeDTO(String[] tokenize, String amc, String schemeType) {
List<Long> allSchemeIds = findAllSchemeIds();
Long schemeCode = Long.valueOf(tokenize[0]);
String payout = tokenize[2];
String nav = tokenize[4];
String date = tokenize[7];
if (allSchemeIds.contains(schemeCode)) {
Expand Down Expand Up @@ -218,4 +232,6 @@ URI buildHistoricalNavUri(String toDate, String fromDate) {
.formatted(fromDate, toDate);
return UriComponentsBuilder.fromHttpUrl(historicalUrl).build().toUri();
}

record SchemeData(String[] tokenize, String amc, String schemeType) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ void fetchSchemesByFundName() throws Exception {
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(header().string(HttpHeaders.CONTENT_TYPE, is(MediaType.APPLICATION_JSON_VALUE)))
.andExpect(jsonPath("$.size()", is(171)));
.andExpect(jsonPath("$.size()", is(174)));
}
}

0 comments on commit f47c8c4

Please sign in to comment.