0
\$\begingroup\$

I call another microservice to check whether there is any holiday on any particular day. This will then add a comment in the db if the rest call doesn't fetch an empty list(a list of size 1).

Here is the code in service:

 public void updateMeetingStatus() {
 List<DialogueEntity> dialogueEntities = dialogueDBRepo.getChildDialogueToUpdate();
 dialogueEntities.forEach(dialogueEntity -> {
 if (Boolean.TRUE.equals(checkAndMarkSkipped(dialogueEntity))) {
 logger.info("Holiday detected for updateMeetingStatus");
 dialogueEntity.setComment(
 "Dialogue Skipped because originator/participant location has holiday on this particular date!");
 }
 updateDialogueStatus(dialogueEntity, DialogueStatus.SKIPPED.getStatus());
 });
 dialogueDBRepo.saveAll(dialogueEntities);
 List<DialogueEntity> parentDialogues = dialogueDBRepo.getParentDialoguesToUpdate();
 if (!CollectionUtils.isEmpty(parentDialogues)) {
 parentDialogues = parentDialogues.stream()
 .map(dialogueEntity -> updateDialogueStatus(dialogueEntity, DialogueStatus.CLOSED.getStatus()))
 .collect(Collectors.toList());
 dialogueDBRepo.saveAll(parentDialogues);
 }
 }
private Boolean checkAndMarkSkipped(DialogueEntity entity) {
 String originator = entity.getOriginatorNtnet();
 EmployeeHierarchyEntity originatorLoc = hierarchyDBRepo.findByNtNetId(originator);
 String originatorLocation = originatorLoc.getLocation();
 String participant = entity.getParticipantNtnet();
 EmployeeHierarchyEntity participantLoc = hierarchyDBRepo.findByNtNetId(participant);
 String participantLocation = participantLoc.getLocation();
 if (Boolean.TRUE.equals(!checkIfHolidayExists(entity.getDateOfDialogue(), originatorLocation))
 || Boolean.TRUE.equals(!checkIfHolidayExists(entity.getDateOfDialogue(), participantLocation))) {
 return true;
 }
 return false;
 }
private Boolean checkIfHolidayExists(LocalDate dateOfDialogue, String originatorLoc) {
 List<Date> date = restClientService.getHolidaysBetweenDates(
 Date.from(dateOfDialogue.atStartOfDay(ZoneId.systemDefault()).toInstant()),
 Date.from(dateOfDialogue.atStartOfDay(ZoneId.systemDefault()).toInstant()), originatorLoc,
 JwtGenerator.generateJwt(""));
 return date.isEmpty();
 }
@Override
 public List<Date> getHolidaysBetweenDates(Date fromDate, Date toDate, String holidayLocation, String token) {
 ResponseEntity<List<Date>> response = holidayServiceRestClient.getHolidaysBetweenDates(holidayLocation, fromDate, toDate, token);
 if (response.getStatusCode() == HttpStatus.OK) {
 return response.getBody();
 } else if (response.getStatusCode() == HttpStatus.NO_CONTENT) {
 logger.error("Holidays not found!");
 }
 return new ArrayList<>();
 }

JwtGenerator

public class JwtGenerator {
 private JwtGenerator(){
 }
 private static final String SECRET_KEY = "${jwt.config.secrate_key}";
 public static String generateJwt(String subject) {
 long nowMillis = System.currentTimeMillis();
 Date now = new Date(nowMillis);
 long expirationMillis = nowMillis + 3600000; // Set expiration time to 1 hour from now
 Date expiration = new Date(expirationMillis);
 return Jwts.builder()
 .setSubject(subject)
 .setIssuedAt(now)
 .setExpiration(expiration)
 .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
 .compact();
 }
}
asked Apr 11, 2023 at 16:29
\$\endgroup\$
1
  • 4
    \$\begingroup\$ Please do not post fragments of your code. Post it in its entirety. \$\endgroup\$ Commented Apr 11, 2023 at 16:54

1 Answer 1

2
\$\begingroup\$

Well... from what I've managed to understand, your code is designed to update the meeting status based on whether there is a holiday on the meeting date for either the originator or the participant. The code makes use of a separate microservice to fetch holidays and check if the meeting date is a holiday or not. If a holiday is detected, the meeting status is updated with a comment stating that it was skipped due to a holiday at the location.

Right?

The logic seems to be clear and functional, but there are a few suggestions to improve the code:

  • Use Java 8 features - prefer Optional and functional programming constructs for better readability and conciseness.
  • Simplify some of the conditions in the checkAndMarkSkipped method.
  • Consider using LocalDate instead of Date for more modern date handling in the getHolidaysBetweenDates method
  • Replace Boolean with the primitive boolean in checkAndMarkSkipped method, and simplified the conditionals
  • Replace Date with LocalDate in getHolidaysBetweenDates method
answered Apr 15, 2023 at 9:17
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.