Skip to content

Commit e261b02

Browse files
committed
#86 | added gender field in Subject.java and successfully inserted dummy data to dummy org
1 parent d762e5d commit e261b02

File tree

11 files changed

+249
-44
lines changed

11 files changed

+249
-44
lines changed

avni/src/main/java/org/avni_integration_service/avni/domain/Subject.java

+10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class Subject extends AvniBaseContract {
1212
public static final String ExternalIdFieldName = "External ID";
1313
public static final String FirstNameFieldName = "First name";
1414
public static final String RegistrationDateFieldName = "Registration date";
15+
public static final String GenderName = "Gender";
1516

1617
public String getId(String avniIdentifierConcept) {
1718
return (String) getObservation(avniIdentifierConcept);
@@ -72,4 +73,13 @@ public void setAddress(String address) {
7273
public String getAddress() {
7374
return MapUtil.getString(AddressFieldName, this.map);
7475
}
76+
77+
@JsonIgnore
78+
public String getGender() {
79+
return (String) getObservation(GenderName);
80+
}
81+
82+
public void setGender(String gender) {
83+
set(GenderName, gender);
84+
}
7585
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.avni_integration_service.lahi.domain;
2+
3+
import java.util.List;
4+
5+
public interface LahiEntity {
6+
List<String> getObservationFields();
7+
Object getValue(String responseField);
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package org.avni_integration_service.lahi.domain;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import org.avni_integration_service.avni.domain.Subject;
5+
import org.avni_integration_service.util.MapUtil;
6+
7+
import java.util.Arrays;
8+
import java.util.Date;
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.stream.Collectors;
12+
13+
@JsonIgnoreProperties(ignoreUnknown = true)
14+
public class Student implements LahiEntity {
15+
16+
private static final String FIRST_NAME = "avni_first_name";
17+
private static final String LAST_NAME = "avni_last_name";
18+
private static final String DATE_OF_BIRTH = "avni_date_of_birth";
19+
private static final String DATE_OF_REGISTRATION = "updated_at";
20+
private static final String GENDER = "avni_gender";
21+
private static final String STATE = "avni_state";
22+
private static final String DISTRICT = "avni_district_name";
23+
private static final String BLOCK = "";
24+
private static final String SCHOOL = "avni_school_name";
25+
private static final String UDISE = "";
26+
private static final String OTHER_SCHOOL_NAME = "";
27+
private static final String STUDENT_CONTACT_NUMBER = "phone";
28+
private static final String ALTERNATE_NUMBER = "avni_alternate_contact";
29+
private static final String EMAIL = "avni_email";
30+
private static final String HIGHEST_QUALIFICATION = "avni_highest_qualification";
31+
private static final String OTHER_QUALIFICATION = "avni_other_qualification";
32+
private static final String QUALIFICATION_STATUS = "avni_qualification_status";
33+
private static final String ACADEMIC_YEAR = "avni_academic_year";
34+
private static final String VOCATIONAL = "avni_vocational";
35+
private static final String TRADE = "avni_trade";
36+
private static final String STUDENT_PERMISSION = "";
37+
private static final String STUDENT_ADDRESS = "Other, Other, Other, Other";
38+
39+
//TODO remove demand field start
40+
41+
private static final String DemandDistrictField = "District";
42+
private static final String DemandStateField = "State";
43+
private static final String DemandNameField = "DemandName";
44+
private static final String DemandTargetCommunity = "TargetCommunity";
45+
private static final String DemandIdField = "DemandId";
46+
private static final String DemandIsVoidedField = "IsVoided";
47+
private static final String DemandStatusField = "DemandStatus";
48+
private static final String DispatchStatusField = "DispatchStatus";
49+
50+
//TODO remove demand field end
51+
private Map<String, Object> response;
52+
53+
private static final List<String> Core_Fields = Arrays.asList(FIRST_NAME,LAST_NAME,DATE_OF_BIRTH,
54+
DATE_OF_REGISTRATION,GENDER);
55+
//TODO add address fields to above and also anyother fields
56+
57+
public static Student from(Map<String, Object> studentResponse) {
58+
Student student = new Student();
59+
student.response = studentResponse;
60+
return student;
61+
}
62+
63+
public Subject subjectWithoutObservations() {
64+
Subject subject = new Subject();
65+
subject.setSubjectType("Student");
66+
subject.setAddress(STUDENT_ADDRESS);
67+
// Date demandDate = DateTimeUtil.offsetTimeZone(new Date(), DateTimeUtil.UTC, DateTimeUtil.IST);
68+
// subject.setRegistrationDate(demandDate);
69+
// subject.setAddress(MapUtil.getString(DemandStateField, response) +", "+MapUtil.getString(DemandDistrictField, response));
70+
// subject.setExternalId(MapUtil.getString(DemandIdField, response));
71+
// subject.setFirstName(MapUtil.getString(DemandNameField, response));
72+
// subject.setVoided(MapUtil.getBoolean(DemandIsVoidedField, response));
73+
// String[] arrayOfTCs = MapUtil.getString(DemandTargetCommunity, response) != null ? MapUtil.getString(DemandTargetCommunity, response).split(";") : null;
74+
// subject.addObservation("Target Community", arrayOfTCs);
75+
// subject.addObservation("Type of Disaster", demandDto.getTypeOfDisaster());
76+
// subject.addObservation("Number of people", this.getNumberOfPeople());
77+
// subject.addObservation("Account Name", this.getAccountName());
78+
// subject.addObservation("AccountId", this.getAccountId());
79+
// subject.addObservation("DemandId", demandDto.getDemandId());
80+
// subject.addObservation("demandName", demandDto.getDemandName());
81+
// subject.addObservation("District", demandDto.getDistrict());
82+
return subject;
83+
}
84+
85+
@Override
86+
public List<String> getObservationFields() {
87+
return response.keySet().stream().filter(s -> !Core_Fields.contains(s)).collect(Collectors.toList());
88+
}
89+
90+
@Override
91+
public Object getValue(String responseField) {
92+
return this.response.get(responseField);
93+
}
94+
}

lahi/src/main/java/org/avni_integration_service/lahi/job/AvniLahiMainJob.java

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public AvniLahiMainJob(Bugsnag bugsnag, HealthCheckService healthCheckService,
3737

3838
public void execute() {
3939
try {
40+
logger.info("Lahi Main Job Started !!!!!");
4041
avniHttpClient.setAvniSession(lahiAvniSessionFactory.createSession());
4142
studentWorker.fetchDetails();
4243
// TODO: 08/09/23

lahi/src/main/java/org/avni_integration_service/lahi/repository/GlificRepository.java

-22
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.avni_integration_service.lahi.repository;
2+
3+
import org.apache.log4j.Logger;
4+
import org.avni_integration_service.avni.domain.Subject;
5+
import org.avni_integration_service.avni.repository.AvniSubjectRepository;
6+
import org.springframework.stereotype.Component;
7+
8+
import java.util.List;
9+
10+
@Component
11+
public class StudentRepository {
12+
//TODO rename to more appropriate name (StudentRepository)
13+
14+
private static final Logger logger = Logger.getLogger(StudentRepository.class);
15+
16+
private final AvniSubjectRepository avniSubjectRepository;
17+
public StudentRepository(AvniSubjectRepository avniSubjectRepository) {
18+
this.avniSubjectRepository = avniSubjectRepository;
19+
}
20+
21+
22+
23+
24+
public void insert(List<Subject> list){
25+
logger.info("inserting record !!!!!");
26+
list.forEach(avniSubjectRepository::create);
27+
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.avni_integration_service.lahi.service;
2+
3+
import org.avni_integration_service.integration_data.repository.MappingMetaDataRepository;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
8+
public abstract class BaseLahiService {
9+
protected static final Logger logger = LoggerFactory.getLogger(BaseLahiService.class);
10+
private final MappingMetaDataRepository mappingMetaDataRepository;
11+
12+
13+
protected BaseLahiService(MappingMetaDataRepository mappingMetaDataRepository) {
14+
this.mappingMetaDataRepository = mappingMetaDataRepository;
15+
}
16+
17+
// TODO: 13/09/23
18+
/*
19+
protected void populateObservations(ObservationHolder observationHolder, GoonjEntity goonjEntity, String mappingGroup) {
20+
List<String> observationFields = goonjEntity.getObservationFields();
21+
for (String obsField : observationFields) {
22+
MappingMetaData mapping = mappingMetaDataRepository.getAvniMappingIfPresent(mappingGroup, MappingType_Obs, obsField, goonjContextProvider.get().getIntegrationSystem().getId());
23+
if(mapping == null) {
24+
logger.error("Mapping entry not found for observation field: " + obsField);
25+
continue;
26+
}
27+
ObsDataType dataTypeHint = mapping.getDataTypeHint();
28+
if (dataTypeHint == null)
29+
observationHolder.addObservation(mapping.getAvniValue(), goonjEntity.getValue(obsField));
30+
else if (dataTypeHint == ObsDataType.Coded && goonjEntity.getValue(obsField) != null) {
31+
MappingMetaData answerMapping = mappingMetaDataRepository.getAvniMappingIfPresent(mappingGroup, MappingType_Obs, goonjEntity.getValue(obsField).toString(), goonjContextProvider.get().getIntegrationSystem().getId());
32+
if(answerMapping == null) {
33+
String errorMessage = "Answer Mapping entry not found for coded concept answer field: " + obsField;
34+
logger.error(errorMessage);
35+
throw new MappingException(errorMessage);
36+
}
37+
observationHolder.addObservation(mapping.getAvniValue(), answerMapping.getAvniValue());
38+
}
39+
}
40+
}*/
41+
}

lahi/src/main/java/org/avni_integration_service/lahi/service/DataExtractorService.java

+6-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.cloud.bigquery.*;
44
import org.avni_integration_service.lahi.config.BigQueryConnector;
5+
import org.avni_integration_service.lahi.repository.StudentRepository;
56
import org.springframework.stereotype.Service;
67

78
import java.util.UUID;
@@ -11,11 +12,11 @@ public class DataExtractorService {
1112

1213
private final BigQueryConnector bigQueryConnector;
1314

14-
public DataExtractorService( BigQueryConnector bigQueryConnector) {
15+
public DataExtractorService(BigQueryConnector bigQueryConnector) {
1516
this.bigQueryConnector = bigQueryConnector;
1617
}
1718

18-
public void queryToBigQuery(String sqlQuery) throws InterruptedException {
19+
public TableResult queryToBigQuery(String sqlQuery) throws InterruptedException {
1920

2021
QueryJobConfiguration queryConfig =
2122
QueryJobConfiguration.newBuilder(
@@ -41,14 +42,9 @@ public void queryToBigQuery(String sqlQuery) throws InterruptedException {
4142

4243
// Get the results.
4344
TableResult result = queryJob.getQueryResults();
45+
return result;
46+
47+
4448

45-
// TODO return result set
46-
// Print all pages of the results.
47-
for (FieldValueList row : result.iterateAll()) {
48-
// String type
49-
String name = row.get("name").getStringValue();
50-
String age = row.get("age").getNumericValue().toPlainString();
51-
System.out.printf("%s is of the age %s \n", name, age);
52-
}
5349
}
5450
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
11
package org.avni_integration_service.lahi.service;
22

3+
import com.google.cloud.bigquery.FieldValueList;
4+
import com.google.cloud.bigquery.TableResult;
5+
import org.apache.log4j.Logger;
6+
import org.avni_integration_service.avni.domain.Subject;
37
import org.avni_integration_service.integration_data.repository.IntegrationSystemRepository;
48
import org.avni_integration_service.integration_data.repository.MappingMetaDataRepository;
59
import org.springframework.stereotype.Service;
610

11+
import java.util.*;
12+
713
@Service
814
public class LahiMappingMetadataService {
915

1016
private final MappingMetaDataRepository mappingMetaDataRepository;
1117

1218
private final IntegrationSystemRepository integrationSystemRepository;
19+
private static final Logger logger = Logger.getLogger(AvniLahiErrorService.class);
1320

14-
public LahiMappingMetadataService(MappingMetaDataRepository mappingMetaDataRepository,
15-
IntegrationSystemRepository integrationSystemRepository) {
21+
public LahiMappingMetadataService(MappingMetaDataRepository mappingMetaDataRepository, IntegrationSystemRepository integrationSystemRepository) {
1622
this.mappingMetaDataRepository = mappingMetaDataRepository;
1723
this.integrationSystemRepository = integrationSystemRepository;
1824
}
1925

2026
//todo
27+
public List<Subject> mappingMetadata(TableResult tableResult){
28+
logger.info("mappingMetadata is calling !!!!!!!!!");
29+
List<Subject> doctorList = new LinkedList<>();
30+
for (FieldValueList row : tableResult.iterateAll()) {
31+
// String type
32+
String name = row.get("name").getStringValue();
33+
String age = row.get("age").getNumericValue().toPlainString();
34+
logger.info(String.format("%s is of the age %s \n", name, age));
35+
Subject subject = new Subject();
36+
subject.setSubjectType("Doctor");
37+
subject.setFirstName(name);
38+
subject.setGender("Male");
39+
Date date = new Date();
40+
subject.setRegistrationDate(date);
41+
subject.setAddress("Sample Location");
42+
doctorList.add(subject);
43+
}
44+
return doctorList;
45+
}
46+
47+
2148
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,39 @@
11
package org.avni_integration_service.lahi.worker;
22

3+
import com.google.cloud.bigquery.TableResult;
34
import org.apache.log4j.Logger;
5+
import org.avni_integration_service.avni.domain.Subject;
6+
import org.avni_integration_service.avni.repository.AvniSubjectRepository;
7+
import org.avni_integration_service.lahi.repository.StudentRepository;
48
import org.avni_integration_service.lahi.service.DataExtractorService;
9+
import org.avni_integration_service.lahi.service.LahiMappingMetadataService;
510
import org.springframework.stereotype.Component;
611

12+
import java.util.List;
13+
714
@Component
815
public class StudentWorker {
16+
public static final String BULK_FETCH_QUERY = "SELECT name, age FROM `ringed-prism-398304.covid_19_open_data.doctor` LIMIT 1000";
917
private static final Logger logger = Logger.getLogger(StudentWorker.class);
1018
private final DataExtractorService dataExtractorService;
19+
private final LahiMappingMetadataService lahiMappingMetadataService;
20+
private final StudentRepository studentRepository;
21+
1122

12-
public StudentWorker(DataExtractorService dataExtractorService) {
23+
public StudentWorker(DataExtractorService dataExtractorService, LahiMappingMetadataService lahiMappingMetadataService, StudentRepository studentRepository) {
1324
this.dataExtractorService = dataExtractorService;
25+
this.lahiMappingMetadataService = lahiMappingMetadataService;
26+
this.studentRepository = studentRepository;
1427
}
1528

16-
1729
public void fetchDetails() throws InterruptedException {
18-
//TODO
1930
logger.info("fetch detail working !!!!!!!!!!");
20-
dataExtractorService.queryToBigQuery("SELECT name, age FROM `ringed-prism-398304.covid_19_open_data.doctor` LIMIT 1000");
31+
//TODO fetch and call the StudentRepository here
32+
TableResult result = dataExtractorService.queryToBigQuery(BULK_FETCH_QUERY);
33+
List<Subject> doctorList = lahiMappingMetadataService.mappingMetadata(result);
34+
studentRepository.insert(doctorList);
35+
2136
}
37+
38+
2239
}

lahi/src/main/resources/lahi-application.properties

+10-6
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@ lahi.glific.accountSID=${LAHI_GLIFIC_ACCOUNT_SID:dummy}
44
lahi.glific.subdomain=${LAHI_GLIFIC_SUBDOMAIN:dummy}
55

66
# Application
7-
## Run at 02:00 am
8-
lahi.app.cron.main=${LAHI_INT_SCHEDULE_CRON:-}
9-
lahi.app.cron.full.error=${LAHI_INT_SCHEDULE_CRON_FULL_ERROR:-}
7+
## Run every 2 mins
8+
lahi.app.cron.main=${LAHI_INT_SCHEDULE_CRON:0 0/2 * * * ?}
9+
lahi.app.cron.full.error=${LAHI_INT_SCHEDULE_CRON_FULL_ERROR:0 0/4 * * * ?}
1010

1111
#Avni connection
12-
lahi.avni.api.url=${LAHI_AVNI_API_URL:http://localhost:8080}
13-
lahi.avni.impl.username=${LAHI_AVNI_API_USER:dummy}
14-
lahi.avni.impl.password=${LAHI_AVNI_API_PASSWORD:dummy}
12+
lahi.avni.api.url=${LAHI_AVNI_API_URL:https://app.avniproject.org}
13+
lahi.avni.impl.username=${LAHI_AVNI_API_USER:external-api-user@vedantbootcamp}
14+
lahi.avni.impl.password=${LAHI_AVNI_API_PASSWORD:lahi@1234}
1515
lahi.avni.authentication.enabled=true
16+
17+
#big query key
18+
spring.cloud.gcp.project-id=ringed-prism-398304
19+
spring.cloud.gcp.bigquery.dataset-name=covid_19_open_data

0 commit comments

Comments
 (0)