Skip to content

Commit

Permalink
Merge pull request #17 from sunbird-cb/dev-4.8.16
Browse files Browse the repository at this point in the history
Dev 4.8.16
  • Loading branch information
SaipradeepR authored Jul 24, 2024
2 parents 8ab62a0 + da7670a commit 9a16a1b
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 21 deletions.
70 changes: 58 additions & 12 deletions src/main/java/com/igot/cb/consumer/KafkaConsumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.springframework.web.client.RestTemplate;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;

@Component
Expand Down Expand Up @@ -73,7 +74,8 @@ public void enrollUpdateConsumer(ConsumerRecord<String, String> data) {
Map<String, Object> userCourseEnrollMap = mapper.readValue(data.value(), HashMap.class);
if (userCourseEnrollMap.containsKey("userid") && userCourseEnrollMap.get("userid") instanceof String && userCourseEnrollMap.containsKey("courseid") && userCourseEnrollMap.get("courseid") instanceof String) {
String extCourseId = userCourseEnrollMap.get("courseid").toString();
String courseId = callExtApi(extCourseId);
JsonNode result=callExtApi(extCourseId);
String courseId=result.path("content").get("contentId").asText();
log.info("KafkaConsumer :: enrollUpdateConsumer ::courseId from cios api {}", courseId);
String[] parts = ((String) userCourseEnrollMap.get("userid")).split("@");
userCourseEnrollMap.put("userid", parts[0]);
Expand All @@ -99,7 +101,16 @@ public void enrollUpdateConsumer(ConsumerRecord<String, String> data) {
Resource resource = resourceLoader.getResource("classpath:certificateTemplate.json");
InputStream inputStream = resource.getInputStream();
JsonNode jsonNode = mapper.readTree(inputStream);
replacePlaceholders(jsonNode, propertyMap);
Map<String, Object> certificateRequest = new HashMap<>();
certificateRequest.put("userid", userCourseEnrollMap.get("userid"));
certificateRequest.put("courseid", courseId);
certificateRequest.put("completiondate", userCourseEnrollMap.get("completedon"));
certificateRequest.put("providerName",result.path("content").path("contentPartner").get("contentPartnerName").asText());
certificateRequest.put("courseName",result.path("content").get("name").asText());
certificateRequest.put("courseName",result.path("content").get("name").asText());
certificateRequest.put("coursePosterImage",result.path("content").path("contentPartner").get("link").asText());
certificateRequest.put("recipientName",readUserName(userCourseEnrollMap.get("userid").toString()));
replacePlaceholders(jsonNode, certificateRequest);
producer.push(certificate, jsonNode);
inputStream.close();
log.info("KafkaConsumer::enrollUpdateConsumer:updated");
Expand All @@ -111,7 +122,26 @@ public void enrollUpdateConsumer(ConsumerRecord<String, String> data) {
}
}

private String callExtApi(String extCourseId) {
private String readUserName(String userid) {
List<String> fields = Arrays.asList("firstname","lastname"); // Assuming user_id is the column name in your table
Map<String, Object> propertyMap = new HashMap<>();
propertyMap.put("id", userid);
List<Map<String, Object>> userEnrollmentList = cassandraOperation.getRecordsByProperties(
Constants.KEYSPACE_SUNBIRD,
Constants.TABLE_USER,
propertyMap,
fields
);
String firstname= (String) userEnrollmentList.stream().findFirst().get().get("firstname");
String lastname= (String) userEnrollmentList.stream().findFirst().get().get("lastname");
String fullname=firstname;
if(lastname!=null){
fullname= fullname+" "+lastname;
}
return fullname;
}

private JsonNode callExtApi(String extCourseId) {
log.info("KafkaConsumer :: callExtApi");
String url = baseUrl + fixedUrl + extCourseId;
HttpHeaders headers = new HttpHeaders();
Expand All @@ -125,7 +155,7 @@ private String callExtApi(String extCourseId) {
);
if (response.getStatusCode().is2xxSuccessful()) {
JsonNode jsonNode = mapper.valueToTree(response.getBody());
return jsonNode.path("content").path("contentId").asText();
return jsonNode;
} else {
throw new RuntimeException("Failed to retrieve externalId. Status code: " + response.getStatusCodeValue());
}
Expand All @@ -144,7 +174,7 @@ public static Timestamp convertToTimestamp(String dateString) {
}
}

private static void replacePlaceholders(JsonNode jsonNode, Map<String, Object> propertyMap) {
private static void replacePlaceholders(JsonNode jsonNode, Map<String, Object> certificateRequest) {
log.info("KafkaConsumer :: replacePlaceholders");
if (jsonNode.isObject()) {
ObjectNode objectNode = (ObjectNode) jsonNode;
Expand All @@ -154,38 +184,54 @@ private static void replacePlaceholders(JsonNode jsonNode, Map<String, Object> p
String textValue = value.asText();
if (textValue.startsWith("${") && textValue.endsWith("}")) {
String placeholder = textValue.substring(2, textValue.length() - 1);
String replacement = getReplacementValue(placeholder, propertyMap);
String replacement = getReplacementValue(placeholder, certificateRequest);
objectNode.put(entry.getKey(), replacement);
}
} else if (value.isArray()) {
value.elements().forEachRemaining(element -> {
if (element.isObject()) {
replacePlaceholders(element, propertyMap);
replacePlaceholders(element, certificateRequest);
}
});
} else {
replacePlaceholders(value, propertyMap);
replacePlaceholders(value, certificateRequest);
}
});
}
}

private static String getReplacementValue(String placeholder, Map<String, Object> propertyMap) {
private static String getReplacementValue(String placeholder, Map<String, Object> certificateRequest) {
log.info("KafkaConsumer :: getReplacementValue");
switch (placeholder) {
case "user.id":
return (String) propertyMap.get("userid");
return (String) certificateRequest.get("userid");
case "course.id":
return (String) propertyMap.get("courseid");
return (String) certificateRequest.get("courseid");
case "today.date":
return LocalDate.now().toString();
return convertDateFormat((String) certificateRequest.get("completiondate"));
case "time.ms":
return String.valueOf(System.currentTimeMillis());
case "unique.id":
return UUID.randomUUID().toString();
case "course.name":
return (String) certificateRequest.get("courseName");
case "provider.name":
return (String) certificateRequest.get("providerName");
case "user.name":
return (String) certificateRequest.get("recipientName");
case "course.poster.image":
return (String) certificateRequest.get("coursePosterImage");
default:
return "";
}
}

private static String convertDateFormat(String originalDate) {
DateTimeFormatter originalFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate date = LocalDate.parse(originalDate, originalFormatter);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = date.format(outputFormatter);
return formattedDate;
}

}
20 changes: 11 additions & 9 deletions src/main/resources/certificateTemplate.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,30 @@
},
"edata": {
"basePath": "https://portal.karmayogi.nic.in/certs",
"courseName": "Effective communication",
"coursePosterImage": "https://portal.karmayogi.nic.in/content-store/content/do_1139053700166533121199/artifact/do_1139053700166533121199_1697432863723_effectivecommunication1697432865415.jpg",
"courseName": "${course.name}",
"coursePosterImage": "${course.poster.image}",
"criteria": {
"narrative": "certificatetemplatefinalised2023mar06.svg"
"narrative": "cornel_completion_certificate.svg"
},
"data": [
{
"recipientId": "${user.id}",
"recipientName": "Ankit Kumar"
"recipientName": "${user.name}"
}
],
"issuedDate": "${today.date}",
"issuer": {
"name": "in",
"url": "https://diksha.gov.in/gj/"
},
"name": "certificatetemplatefinalised2023mar06.svg",
"name": "cornel_completion_certificate.svg",
"oldId": "",
"orgId": "01384739322653081641",
"primaryCategory": "External-Course",
"providerName": "Ministry for Testing",
"providerName": "${provider.name}",
"related": {
"courseId": "${course.id}",
"type": "certificatetemplatefinalised2023mar06.svg"
"type": "cornel_completion_certificate.svg"
},
"signatoryList": [
{
Expand All @@ -44,9 +44,9 @@
"designation": "Home Minister"
}
],
"svgTemplate": "https://static.karmayogiprod.nic.in/igot/content/do_11387584827074969612/artifact/do_11387584827074969612_1693829136144_certificatetemplatefinalised2023mar061693829134793.svg",
"svgTemplate": "https://static.karmayogiprod.nic.in/igot/content/do_114104376473182208114/artifact/do_114104376473182208114_1721740907033_cornel_completion_certificate.svg",
"tag": "${course.id}",
"templateId": "do_11387584827074969612",
"templateId": "do_114104376473182208114",
"userId": "${user.id}"
},
"eid": "BE_JOB_REQUEST",
Expand All @@ -57,3 +57,5 @@
"type": "GenerateCertificate"
}
}


0 comments on commit 9a16a1b

Please sign in to comment.