diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DatasourceStructure.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DatasourceStructure.java index f2c5144060..99eb13633b 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DatasourceStructure.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/DatasourceStructure.java @@ -8,6 +8,7 @@ import java.util.List; @Data @NoArgsConstructor +@AllArgsConstructor public class DatasourceStructure { List tables; diff --git a/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java b/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java index e9f05096db..883db8e1f2 100644 --- a/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java +++ b/app/server/appsmith-plugins/dynamoPlugin/src/main/java/com/external/plugins/DynamoPlugin.java @@ -6,6 +6,7 @@ import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; +import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.DatasourceTestResult; import com.appsmith.external.models.Endpoint; import com.appsmith.external.plugins.BasePlugin; @@ -29,6 +30,7 @@ import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder; import software.amazon.awssdk.services.dynamodb.model.DynamoDbResponse; +import software.amazon.awssdk.services.dynamodb.model.ListTablesResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; @@ -38,6 +40,7 @@ import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -202,6 +205,28 @@ public class DynamoPlugin extends BasePlugin { ) .subscribeOn(scheduler); } + + @Override + public Mono getStructure(DynamoDbClient ddb, DatasourceConfiguration datasourceConfiguration) { + return Mono.fromCallable(() -> { + final ListTablesResponse listTablesResponse = ddb.listTables(); + + List tables = new ArrayList<>(); + for (final String tableName : listTablesResponse.tableNames()) { + tables.add(new DatasourceStructure.Table( + DatasourceStructure.TableType.TABLE, + tableName, + Collections.emptyList(), + Collections.emptyList(), + Collections.emptyList() + )); + } + + return new DatasourceStructure(tables); + + }).subscribeOn(scheduler); + } + } private static String toLowerCamelCase(String action) { diff --git a/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java b/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java index 65ffd2675f..39b6c03dae 100644 --- a/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java +++ b/app/server/appsmith-plugins/dynamoPlugin/src/test/java/com/external/plugins/DynamoPluginTest.java @@ -4,6 +4,7 @@ import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionResult; import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; +import com.appsmith.external.models.DatasourceStructure; import com.appsmith.external.models.Endpoint; import lombok.extern.log4j.Log4j; import org.junit.BeforeClass; @@ -29,6 +30,7 @@ import java.net.URI; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -91,8 +93,6 @@ public class DynamoPluginTest { )) .build()); - System.out.println(ddb.listTables()); - Endpoint endpoint = new Endpoint(); endpoint.setHost(host); endpoint.setPort(port.longValue()); @@ -238,4 +238,24 @@ public class DynamoPluginTest { .verifyComplete(); } + @Test + public void testStructure() { + final Mono structureMono = pluginExecutor + .datasourceCreate(dsConfig) + .flatMap(conn -> pluginExecutor.getStructure(conn, dsConfig)); + + StepVerifier.create(structureMono) + .assertNext(structure -> { + assertNotNull(structure); + assertNotNull(structure.getTables()); + assertEquals( + List.of("cities"), + structure.getTables().stream() + .map(DatasourceStructure.Table::getName) + .collect(Collectors.toList()) + ); + }) + .verifyComplete(); + } + }