Skip to content

Commit

Permalink
avniproject#762 | DB and Collection are now fetched from DB if they a…
Browse files Browse the repository at this point in the history
…rent cached
  • Loading branch information
ombhardwajj committed Sep 8, 2024
1 parent 4f382cc commit 87849b0
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ public Database(String name, String engine, DatabaseDetails details) {
this(null,name,engine,details);
}

public Database(Integer id,String name, String engine, DatabaseDetails details) {
public Database(String name) {
this.name = name;
}

public Database(Integer id, String name, String engine, DatabaseDetails details) {
this.id=id;
this.name = name;
this.engine = engine;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@

@JsonIgnoreProperties(ignoreUnknown = true)
public class FieldDetails {
public FieldDetails() {
}

public FieldDetails(String name) {
this.name = name;
}

@JsonProperty("id")
private int id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@

@JsonIgnoreProperties(ignoreUnknown = true)
public class TableDetails {
public TableDetails() {
}

public TableDetails(String name) {
this.name = name;
}

@JsonProperty("description")
private String description;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class DatabaseService {
private final ObjectMapper objectMapper;
private final MetabaseService metabaseService;
private final AddressQuestionCreationService addressQuestionCreationService;
private Integer databaseId;
private Database globalDatabase;
private Integer collectionId;

@Value("${metabase.api.url}")
Expand All @@ -27,6 +27,8 @@ public class DatabaseService {
@Value("${metabase.api.key}")
private String apiKey;

private static final String ADDRESS_TABLE = "Address";

@Autowired
public DatabaseService(DatabaseRepository databaseRepository, ObjectMapper objectMapper, MetabaseService metabaseService, AddressQuestionCreationService addressQuestionCreationService) {
this.databaseRepository = databaseRepository;
Expand All @@ -36,39 +38,32 @@ public DatabaseService(DatabaseRepository databaseRepository, ObjectMapper objec
}

public Database getGlobalDatabase() {
Database globalDatabase = metabaseService.getGlobalDatabase();
return databaseRepository.getDatabaseById(globalDatabase);
}

public int getDatabaseId() {
if (databaseId == null) {
databaseId = metabaseService.getGlobalDatabaseId();
}
return databaseId;
return metabaseService.getGlobalDatabase();
}

public int getCollectionId() {
if (collectionId == null) {
collectionId = metabaseService.getGlobalCollectionId();
}
return collectionId;
return metabaseService.getGlobalCollectionId();
}

public SyncStatus getInitialSyncStatus() {
Database globalDatabase = metabaseService.getGlobalDatabase();
DatabaseSyncStatus databaseSyncStatus = databaseRepository.getInitialSyncStatus(globalDatabase);
DatabaseSyncStatus databaseSyncStatus = databaseRepository.getInitialSyncStatus(getGlobalDatabase());
String status = databaseSyncStatus.getInitialSyncStatus();
return SyncStatus.fromString(status);
}

private void ensureSyncComplete() {
SyncStatus syncStatus = getInitialSyncStatus();
if (syncStatus != SyncStatus.COMPLETE) {
throw new RuntimeException("Database sync is not complete. Cannot create questions.");
}
}

public List<String> getSubjectTypeNames() {
Database database = getGlobalDatabase();
TableDetails metadataTable = new TableDetails();
metadataTable.setName("table_metadata");
TableDetails metadataTable = new TableDetails("table_metadata");

TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(database, metadataTable);
TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(getGlobalDatabase(), metadataTable);

DatasetResponse datasetResponse = databaseRepository.findAll(fetchedMetadataTable, database);
DatasetResponse datasetResponse = databaseRepository.findAll(fetchedMetadataTable, getGlobalDatabase());
List<List<String>> rows = datasetResponse.getData().getRows();

List<String> subjectTypeNames = new ArrayList<>();
Expand All @@ -86,17 +81,12 @@ public List<String> getSubjectTypeNames() {
return subjectTypeNames;
}




public List<String> getProgramAndEncounterNames() {
Database database = getGlobalDatabase();
TableDetails metadataTable = new TableDetails();
metadataTable.setName("table_metadata");
TableDetails metadataTable = new TableDetails("table_metadata");

TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(database, metadataTable);
TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(getGlobalDatabase(), metadataTable);

DatasetResponse datasetResponse = databaseRepository.findAll(fetchedMetadataTable, database);
DatasetResponse datasetResponse = databaseRepository.findAll(fetchedMetadataTable, getGlobalDatabase());
List<List<String>> rows = datasetResponse.getData().getRows();

List<String> programNames = new ArrayList<>();
Expand All @@ -112,76 +102,52 @@ public List<String> getProgramAndEncounterNames() {
return programNames;
}


public void createQuestionsForSubjectTypes() throws Exception {
SyncStatus syncStatus = getInitialSyncStatus();
if (syncStatus != SyncStatus.COMPLETE) {
throw new RuntimeException("Database sync is not complete. Cannot create questions.");
}

Database database = getGlobalDatabase();
ensureSyncComplete();
List<String> subjectTypeNames = getSubjectTypeNames();

TableDetails addressTableDetails = new TableDetails();
addressTableDetails.setName("Address");
TableDetails addressTableDetails = new TableDetails(ADDRESS_TABLE);
TableDetails fetchedAddressTableDetails = databaseRepository.findTableDetailsByName(getGlobalDatabase(), addressTableDetails);

TableDetails fetchedAddressTableDetails = databaseRepository.findTableDetailsByName(database, addressTableDetails);
FieldDetails addressFieldDetails = new FieldDetails("id");
FieldDetails subjectFieldDetails = new FieldDetails("address_id");

FieldDetails addressFieldDetails = new FieldDetails();
addressFieldDetails.setName("id");

FieldDetails subjectFieldDetails = new FieldDetails();
subjectFieldDetails.setName("address_id");

for (String subjectTypeName : subjectTypeNames) {
TableDetails subjectTableDetails = new TableDetails();
subjectTableDetails.setName(subjectTypeName);

TableDetails fetchedSubjectTableDetails = databaseRepository.findTableDetailsByName(database, subjectTableDetails);
TableDetails fetchedSubjectTableDetails = databaseRepository.findTableDetailsByName(getGlobalDatabase(), subjectTableDetails);

addressQuestionCreationService.createQuestionForTable(fetchedSubjectTableDetails, fetchedAddressTableDetails, addressFieldDetails, subjectFieldDetails);
}
}



public void createQuestionsForProgramsAndEncounters() throws Exception {
SyncStatus syncStatus = getInitialSyncStatus();
if (syncStatus != SyncStatus.COMPLETE) {
throw new RuntimeException("Database sync is not complete. Cannot create questions.");
}

Database database = getGlobalDatabase();
ensureSyncComplete();
List<String> programAndEncounterNames = getProgramAndEncounterNames();

TableDetails addressTableDetails = new TableDetails();
addressTableDetails.setName("Address");
TableDetails addressTableDetails = new TableDetails(ADDRESS_TABLE);


TableDetails fetchedAddressTableDetails = databaseRepository.findTableDetailsByName(database, addressTableDetails);
TableDetails fetchedAddressTableDetails = databaseRepository.findTableDetailsByName(getGlobalDatabase(), addressTableDetails);

FieldDetails addressFieldDetails = new FieldDetails();
addressFieldDetails.setName("id");
FieldDetails addressFieldDetails = new FieldDetails("id");
FieldDetails programFieldDetails = new FieldDetails("address_id");

FieldDetails programFieldDetails = new FieldDetails();
programFieldDetails.setName("address_id");

for (String programName : programAndEncounterNames) {
TableDetails programTableDetails = new TableDetails();
programTableDetails.setName(programName);

TableDetails fetchedProgramTableDetails = databaseRepository.findTableDetailsByName(database, programTableDetails);
TableDetails fetchedProgramTableDetails = databaseRepository.findTableDetailsByName(getGlobalDatabase(), programTableDetails);

addressQuestionCreationService.createQuestionForTable(fetchedProgramTableDetails, fetchedAddressTableDetails, addressFieldDetails, programFieldDetails);
}
}



public void createQuestionsForIndividualTables() {
SyncStatus syncStatus = getInitialSyncStatus();
if (syncStatus != SyncStatus.COMPLETE) {
throw new RuntimeException("Database sync is not complete. Cannot create questions.");
}
ensureSyncComplete();

Database database = getGlobalDatabase();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,7 @@ public void setupMetabase() {
public int getGlobalDatabaseId() {
if (globalDatabase == null) {
Organisation currentOrganisation = organisationService.getCurrentOrganisation();
Database database = new Database();
database.setName(currentOrganisation.getName());
Database database = new Database(currentOrganisation.getName());
globalDatabase = databaseRepository.getDatabaseByName(database);
}
return globalDatabase.getId();
Expand All @@ -77,14 +76,23 @@ public int getGlobalDatabaseId() {
public int getGlobalCollectionId() {
if (globalCollection == null) {
Organisation currentOrganisation = organisationService.getCurrentOrganisation();
Database database = new Database();
database.setName(currentOrganisation.getName());
Database database = new Database(currentOrganisation.getName());
globalCollection = databaseRepository.getCollectionByName(database);
}
return globalCollection.getIdAsInt();
}

public Database getGlobalDatabase() {
if (globalDatabase == null) {
getGlobalDatabaseId();
}
return globalDatabase;
}

public CollectionInfoResponse getGlobalCollection() {
if (globalCollection == null) {
getGlobalCollectionId();
}
return globalCollection;
}
}

0 comments on commit 87849b0

Please sign in to comment.