From 6c10ce048b2435dafe0047b4862ae34f2a88c3ac Mon Sep 17 00:00:00 2001 From: himeshr Date: Tue, 21 Jan 2025 14:28:42 +0530 Subject: [PATCH] avniproject/avni-server#850 | DBRepo.findTableDetailsByName() make use of targetTable schema instead of onlyInOrgSchema --- .../avni/server/dao/metabase/DatabaseRepository.java | 4 ++-- .../avni/server/dao/metabase/QuestionRepository.java | 4 ++-- .../server/service/metabase/DatabaseService.java | 12 +++++------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/avni-server-api/src/main/java/org/avni/server/dao/metabase/DatabaseRepository.java b/avni-server-api/src/main/java/org/avni/server/dao/metabase/DatabaseRepository.java index d38bc99b8..79433eaec 100644 --- a/avni-server-api/src/main/java/org/avni/server/dao/metabase/DatabaseRepository.java +++ b/avni-server-api/src/main/java/org/avni/server/dao/metabase/DatabaseRepository.java @@ -88,11 +88,11 @@ private List getFields(Database database) { } } - public TableDetails findTableDetailsByName(Database database, TableDetails targetTable, boolean onlyInOrgSchema) { + public TableDetails findTableDetailsByName(Database database, TableDetails targetTable) { MetabaseDatabaseInfo databaseInfo = getDatabaseDetails(database); return databaseInfo.getTables().stream() .filter(tableDetail -> tableDetail.getName().equalsIgnoreCase(targetTable.getName()) - && (tableDetail.getSchema().equalsIgnoreCase(database.getName()) == onlyInOrgSchema)) + && (tableDetail.getSchema().equalsIgnoreCase(database.getName()) == targetTable.getSchema().equalsIgnoreCase(database.getName()))) .findFirst() .orElseThrow(() -> new RuntimeException("Table with name " + targetTable.getName() + " not found.")); } diff --git a/avni-server-api/src/main/java/org/avni/server/dao/metabase/QuestionRepository.java b/avni-server-api/src/main/java/org/avni/server/dao/metabase/QuestionRepository.java index 84b65e48e..807617081 100644 --- a/avni-server-api/src/main/java/org/avni/server/dao/metabase/QuestionRepository.java +++ b/avni-server-api/src/main/java/org/avni/server/dao/metabase/QuestionRepository.java @@ -96,10 +96,10 @@ public void createQuestionForASingleTable(Database database, TableDetails tableD } private MetabaseQuery createAdvancedQuery(String primaryTableName, String secondaryTableName, QuestionConfig config, Database database) { - TableDetails primaryTable = databaseRepository.findTableDetailsByName(database, new TableDetails(primaryTableName), false); + TableDetails primaryTable = databaseRepository.findTableDetailsByName(database, new TableDetails(primaryTableName)); FieldDetails primaryField = databaseRepository.getFieldDetailsByName(database, primaryTable, new FieldDetails(config.getPrimaryField())); - TableDetails secondaryTable = databaseRepository.findTableDetailsByName(database, new TableDetails(secondaryTableName), false); + TableDetails secondaryTable = databaseRepository.findTableDetailsByName(database, new TableDetails(secondaryTableName)); FieldDetails breakoutField = databaseRepository.getFieldDetailsByName(database, secondaryTable, new FieldDetails(config.getBreakoutField())); return new MetabaseQueryBuilder(database, ObjectMapperSingleton.getObjectMapper().createArrayNode()) diff --git a/avni-server-api/src/main/java/org/avni/server/service/metabase/DatabaseService.java b/avni-server-api/src/main/java/org/avni/server/service/metabase/DatabaseService.java index cdfa9e16c..6fe92ecfb 100644 --- a/avni-server-api/src/main/java/org/avni/server/service/metabase/DatabaseService.java +++ b/avni-server-api/src/main/java/org/avni/server/service/metabase/DatabaseService.java @@ -99,14 +99,13 @@ public void createQuestionForTable(TableDetails tableDetails, TableDetails addre public void createQuestionForTable(String tableName) { Database database = getGlobalDatabase(); - TableDetails tableDetails = new TableDetails(tableName, database.getName()); - TableDetails fetchedTableDetails = databaseRepository.findTableDetailsByName(database, tableDetails, true); + TableDetails fetchedTableDetails = databaseRepository.findTableDetailsByName(database, new TableDetails(tableName, database.getName())); questionRepository.createQuestionForASingleTable(database, fetchedTableDetails); } private List getSubjectTypeNames() { - TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(getGlobalDatabase(), new TableDetails("table_metadata"), false); + TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(getGlobalDatabase(), new TableDetails("table_metadata")); DatasetResponse datasetResponse = databaseRepository.findAll(fetchedMetadataTable, getGlobalDatabase()); List> rows = datasetResponse.getData().getRows(); @@ -129,7 +128,7 @@ private List getSubjectTypeNames() { } private List getProgramAndEncounterNames() { - TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(getGlobalDatabase(), new TableDetails("table_metadata"), false); + TableDetails fetchedMetadataTable = databaseRepository.findTableDetailsByName(getGlobalDatabase(), new TableDetails("table_metadata")); DatasetResponse datasetResponse = databaseRepository.findAll(fetchedMetadataTable, getGlobalDatabase()); List> rows = datasetResponse.getData().getRows(); @@ -153,13 +152,12 @@ private List getProgramAndEncounterNames() { private void createQuestionsForEntities(List entityNames, FieldDetails addressFieldDetails, FieldDetails entityFieldDetails) { ensureSyncComplete(); Database database = getGlobalDatabase(); - TableDetails fetchedAddressTableDetails = databaseRepository.findTableDetailsByName(database, new TableDetails(ADDRESS_TABLE, database.getName()), true); + TableDetails fetchedAddressTableDetails = databaseRepository.findTableDetailsByName(database, new TableDetails(ADDRESS_TABLE, database.getName())); List filteredEntities = filterOutExistingQuestions(entityNames); for (String entityName : filteredEntities) { - TableDetails entityTableDetails = new TableDetails(entityName, database.getName()); - TableDetails fetchedEntityTableDetails = databaseRepository.findTableDetailsByName(database, entityTableDetails, true); + TableDetails fetchedEntityTableDetails = databaseRepository.findTableDetailsByName(database, new TableDetails(entityName, database.getName())); createQuestionForTable(fetchedEntityTableDetails, fetchedAddressTableDetails, addressFieldDetails, entityFieldDetails); } }