Skip to content

Commit

Permalink
#850 | Added code to display only specific fields from the main table
Browse files Browse the repository at this point in the history
  • Loading branch information
ombhardwajj committed Feb 11, 2025
1 parent 75667b4 commit aa293a3
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,11 @@ private MetabaseQuery createAdvancedQuery(String primaryTableName, String second
.build();
}

public void createQuestionForTableWithMultipleJoins(Database database, TableDetails tableDetails, List<JoinTableConfig> joinTableConfigs) {
public void createQuestionForTableWithMultipleJoins(Database database, TableDetails tableDetails, List<JoinTableConfig> joinTableConfigs,
List<FieldDetails> primaryTableFields) {
ArrayNode joinsArray = ObjectMapperSingleton.getObjectMapper().createArrayNode();
MetabaseQueryBuilder metabaseQueryBuilder = new MetabaseQueryBuilder(database, joinsArray)
.forTable(tableDetails);
.forTable(tableDetails, primaryTableFields);

for (JoinTableConfig joinTableConfig : joinTableConfigs) {
FieldDetails joinField1 = databaseRepository.getFieldDetailsByName(database, joinTableConfig.getJoinTargetTable(), joinTableConfig.getOriginField());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,6 @@
@Service
public class DatabaseService implements IQuestionCreationService {

private static final String ADDRESS_TABLE = "Address";

private final DatabaseRepository databaseRepository;
private final MetabaseService metabaseService;
private final CollectionRepository collectionRepository;
private final QuestionRepository questionRepository;
private final MetabaseDashboardRepository metabaseDashboardRepository;

private static final String INDIVIDUAL_TABLE = "individual";
private static final String ENROLMENT_TABLE = "program_enrolment";
private static final String ADDRESS_TABLE = "Address";
Expand All @@ -31,6 +23,12 @@ public class DatabaseService implements IQuestionCreationService {
private static final String GENDER_TABLE = "Gender";
private static final String PUBLIC_SCHEMA = "public";

private final DatabaseRepository databaseRepository;
private final MetabaseService metabaseService;
private final CollectionRepository collectionRepository;
private final QuestionRepository questionRepository;
private final MetabaseDashboardRepository metabaseDashboardRepository;

@Autowired
public DatabaseService(DatabaseRepository databaseRepository, MetabaseService metabaseService, CollectionRepository collectionRepository, QuestionRepository questionRepository, MetabaseDashboardRepository metabaseDashboardRepository) {
this.databaseRepository = databaseRepository;
Expand Down Expand Up @@ -219,7 +217,8 @@ private void createQuestionForJoinedTable(Database database, String tableName) {
}

private void createIndividualTypeGenderAddress(Database database, String displayName) {
TableDetails fetchedEntityTableDetails = databaseRepository.findTableDetailsByName(database, new TableDetails(INDIVIDUAL_TABLE));
TableDetails primaryTableDetails = new TableDetails(INDIVIDUAL_TABLE);
TableDetails fetchedEntityTableDetails = databaseRepository.findTableDetailsByName(database, primaryTableDetails);
fetchedEntityTableDetails.setDisplayName(displayName);
fetchedEntityTableDetails.setDescription(displayName);
List<JoinTableConfig> joinTableConfigs = new ArrayList<>();
Expand All @@ -228,7 +227,16 @@ private void createIndividualTypeGenderAddress(Database database, String display
joinTableConfigs.add(configureJoinTable(database, "id", "gender_id", GENDER_TABLE, PUBLIC_SCHEMA));
joinTableConfigs.add(configureJoinTable(database, "id", "address_id", ADDRESS_TABLE, database.getName()));

questionRepository.createQuestionForTableWithMultipleJoins(database, fetchedEntityTableDetails, joinTableConfigs);
//todo add rest of the fields
List<FieldDetails> primaryTableFields = List.of(
databaseRepository.getFieldDetailsByName(database, primaryTableDetails, new FieldDetails("id")),
databaseRepository.getFieldDetailsByName(database, primaryTableDetails, new FieldDetails("uuid")),
databaseRepository.getFieldDetailsByName(database, primaryTableDetails, new FieldDetails("subject_type_id")),
databaseRepository.getFieldDetailsByName(database, primaryTableDetails, new FieldDetails("first_name")),
databaseRepository.getFieldDetailsByName(database, primaryTableDetails, new FieldDetails("last_name")));


questionRepository.createQuestionForTableWithMultipleJoins(database, fetchedEntityTableDetails, joinTableConfigs, primaryTableFields);
}

private void createEnrolmentTypeIndividualAddress(Database database, String displayName) {
Expand All @@ -243,7 +251,7 @@ private void createEnrolmentTypeIndividualAddress(Database database, String disp
joinTableConfigs.add(configureJoinTable(database, "id", "individual_id", INDIVIDUAL_TABLE, PUBLIC_SCHEMA));
joinTableConfigs.add(configureJoinTable(database, "id", "address_id", ADDRESS_TABLE, database.getName(), individualTable));

questionRepository.createQuestionForTableWithMultipleJoins(database, fetchedEntityTableDetails, joinTableConfigs);
questionRepository.createQuestionForTableWithMultipleJoins(database, fetchedEntityTableDetails, joinTableConfigs, Collections.emptyList()); //todo
}

private JoinTableConfig configureJoinTable(Database database, String targetTableJoinColumn,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.avni.server.util.ObjectMapperSingleton;

import java.util.List;

public class MetabaseQueryBuilder {
private final Database database;
private final ArrayNode joinsArray;
Expand All @@ -23,6 +25,24 @@ public MetabaseQueryBuilder forTable(TableDetails tableDetails) {
return this;
}

public MetabaseQueryBuilder forTable(TableDetails tableDetails, List<FieldDetails> primaryTableFields) {
queryNode.put(FieldAttribute.SOURCE_TABLE.getAttributeName(), tableDetails.getId());
if(primaryTableFields != null && !primaryTableFields.isEmpty()) {
ArrayNode selectedFields = objectMapper.createArrayNode();
primaryTableFields.forEach(field -> {
ArrayNode selectedField = objectMapper.createArrayNode();
selectedField.add(FieldAttribute.FIELD.getAttributeName());
selectedField.add(field.getId());
selectedField.add(objectMapper.createObjectNode().put(FieldAttribute.BASE_TYPE.getAttributeName(), FieldType.INTEGER.getTypeName()));
selectedFields.add(selectedField);
});
queryNode.set(FieldAttribute.FIELDS.getAttributeName(), selectedFields);
} else {
queryNode.put(FieldAttribute.FIELDS.getAttributeName(), FieldAttribute.ALL.getAttributeName());
}
return this;
}

public MetabaseQueryBuilder joinWith(TableDetails joinTargetTable, FieldDetails joinField1, FieldDetails joinField2) {
ObjectNode joinNode = objectMapper.createObjectNode();
joinNode.put(FieldAttribute.FIELDS.getAttributeName(), FieldAttribute.ALL.getAttributeName());
Expand Down

0 comments on commit aa293a3

Please sign in to comment.