From cab8a4b794704776445872b96ac983f11db85cd1 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 6 Jul 2022 13:57:48 -0500 Subject: [PATCH 1/6] QQQ-21 updated per updated backend-core - process function -> step renames --- .../sampleapp/SampleMetaDataProvider.java | 73 +++++++++++++++---- .../sampleapp/SampleMetaDataProviderTest.java | 5 +- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index 8cee65c3..dd8e3c2f 100644 --- a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -24,7 +24,7 @@ package com.kingsrook.sampleapp; import java.util.List; import com.kingsrook.qqq.backend.core.exceptions.QException; -import com.kingsrook.qqq.backend.core.interfaces.mock.MockFunctionBody; +import com.kingsrook.qqq.backend.core.interfaces.mock.MockBackendStep; import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QCodeReference; @@ -34,8 +34,9 @@ import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QFieldType; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QBackendStepMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendStepMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QFunctionInputMetaData; -import com.kingsrook.qqq.backend.core.model.metadata.processes.QFunctionMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QFunctionOutputMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QRecordListMetaData; @@ -51,9 +52,10 @@ import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaDat *******************************************************************************/ public class SampleMetaDataProvider { - public static final String MYSQL_BACKEND_NAME = "mysql"; - public static final String FILESYSTEM_BACKEND_NAME = "filesystem"; - public static final String PROCESS_NAME_GREET = "greet"; + public static final String MYSQL_BACKEND_NAME = "mysql"; + public static final String FILESYSTEM_BACKEND_NAME = "filesystem"; + public static final String PROCESS_NAME_GREET = "greet"; + public static final String PROCESS_NAME_GREET_INTERACTIVE = "greetInteractive"; @@ -64,13 +66,14 @@ public class SampleMetaDataProvider { QInstance qInstance = new QInstance(); - qInstance.setAuthentication(SampleMetaDataProvider.defineAuthentication()); - qInstance.addBackend(SampleMetaDataProvider.defineMysqlBackend()); - qInstance.addBackend(SampleMetaDataProvider.defineFilesystemBackend()); - qInstance.addTable(SampleMetaDataProvider.defineTableCarrier()); - qInstance.addTable(SampleMetaDataProvider.defineTablePerson()); - qInstance.addTable(SampleMetaDataProvider.defineTableCityFile()); - qInstance.addProcess(SampleMetaDataProvider.defineProcessGreetPeople()); + qInstance.setAuthentication(defineAuthentication()); + qInstance.addBackend(defineMysqlBackend()); + qInstance.addBackend(defineFilesystemBackend()); + qInstance.addTable(defineTableCarrier()); + qInstance.addTable(defineTablePerson()); + qInstance.addTable(defineTableCityFile()); + qInstance.addProcess(defineProcessGreetPeople()); + qInstance.addProcess(defineProcessGreetPeopleInteractive()); return (qInstance); } @@ -195,10 +198,10 @@ public class SampleMetaDataProvider .withName(PROCESS_NAME_GREET) .withLabel("Greet People") .withTableName("person") - .addFunction(new QFunctionMetaData() + .addStep(new QBackendStepMetaData() .withName("prepare") .withCode(new QCodeReference() - .withName(MockFunctionBody.class.getName()) + .withName(MockBackendStep.class.getName()) .withCodeType(QCodeType.JAVA) .withCodeUsage(QCodeUsage.FUNCTION)) // todo - needed, or implied in this context? .withInputData(new QFunctionInputMetaData() @@ -216,4 +219,46 @@ public class SampleMetaDataProvider ); } + + + /******************************************************************************* + ** Define an interactive version of the 'greet people' process + *******************************************************************************/ + private static QProcessMetaData defineProcessGreetPeopleInteractive() + { + return new QProcessMetaData() + .withName(PROCESS_NAME_GREET_INTERACTIVE) + .withTableName("person") + + .addStep(new QFrontendStepMetaData() + .withName("setup") + .withFormField(new QFieldMetaData("greetingPrefix", QFieldType.STRING)) + .withFormField(new QFieldMetaData("greetingSuffix", QFieldType.STRING)) + ) + + .addStep(new QBackendStepMetaData() + .withName("doWork") + .withCode(new QCodeReference() + .withName(MockBackendStep.class.getName()) + .withCodeType(QCodeType.JAVA) + .withCodeUsage(QCodeUsage.FUNCTION)) // todo - needed, or implied in this context? + .withInputData(new QFunctionInputMetaData() + .withRecordListMetaData(new QRecordListMetaData().withTableName("person")) + .withFieldList(List.of( + new QFieldMetaData("greetingPrefix", QFieldType.STRING), + new QFieldMetaData("greetingSuffix", QFieldType.STRING) + ))) + .withOutputMetaData(new QFunctionOutputMetaData() + .withRecordListMetaData(new QRecordListMetaData() + .withTableName("person") + .addField(new QFieldMetaData("fullGreeting", QFieldType.STRING)) + ) + .withFieldList(List.of(new QFieldMetaData("outputMessage", QFieldType.STRING)))) + ) + + .addStep(new QFrontendStepMetaData() + .withName("results") + .withFormField(new QFieldMetaData("outputMessage", QFieldType.STRING)) + ); + } } diff --git a/src/test/java/com/kingsrook/sampleapp/SampleMetaDataProviderTest.java b/src/test/java/com/kingsrook/sampleapp/SampleMetaDataProviderTest.java index 097b9764..50317d14 100644 --- a/src/test/java/com/kingsrook/sampleapp/SampleMetaDataProviderTest.java +++ b/src/test/java/com/kingsrook/sampleapp/SampleMetaDataProviderTest.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.util.UUID; import com.kingsrook.qqq.backend.core.actions.QueryAction; import com.kingsrook.qqq.backend.core.actions.RunProcessAction; +import com.kingsrook.qqq.backend.core.interfaces.mock.MockBackendStep; import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessRequest; import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessResult; import com.kingsrook.qqq.backend.core.model.actions.query.QueryRequest; @@ -113,8 +114,8 @@ class SampleMetaDataProviderTest QueryResult queryResult = new QueryAction().execute(queryRequest); request.setRecords(queryResult.getRecords()); - request.addValue("greetingPrefix", "Hello"); - request.addValue("greetingSuffix", "there"); + request.addValue(MockBackendStep.FIELD_GREETING_PREFIX, "Hello"); + request.addValue(MockBackendStep.FIELD_GREETING_SUFFIX, "there"); RunProcessResult result = new RunProcessAction().execute(request); assertNotNull(result); From 67cec981e74b7a672675946fb4692e96f7152fbc Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Thu, 7 Jul 2022 14:51:10 -0500 Subject: [PATCH 2/6] QQQ-21: made required fields required on carrier --- .../com/kingsrook/sampleapp/SampleMetaDataProvider.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index dd8e3c2f..ee5899cf 100644 --- a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -133,13 +133,16 @@ public class SampleMetaDataProvider table.addField(new QFieldMetaData("id", QFieldType.INTEGER)); - table.addField(new QFieldMetaData("name", QFieldType.STRING)); + table.addField(new QFieldMetaData("name", QFieldType.STRING) + .withIsRequired(true)); table.addField(new QFieldMetaData("company_code", QFieldType.STRING) // todo enum .withLabel("Company") + .withIsRequired(true) .withBackendName("comp_code")); - table.addField(new QFieldMetaData("service_level", QFieldType.STRING)); // todo enum + table.addField(new QFieldMetaData("service_level", QFieldType.STRING) + .withIsRequired(true)); // todo enum return (table); } From a88bf1b30382e29e477a27eeefd668462f105295 Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Tue, 19 Jul 2022 18:30:20 -0500 Subject: [PATCH 3/6] QQQ-27: updated auth module from fully anonymous to Auth0 --- .../sampleapp/SampleMetaDataProvider.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index 4b9b34b0..0fe8b308 100644 --- a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -23,28 +23,29 @@ package com.kingsrook.sampleapp; import java.util.List; +import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QValueException; -import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; -import com.kingsrook.qqq.backend.core.processes.implementations.mock.MockBackendStep; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; -import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeType; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeUsage; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; -import com.kingsrook.qqq.backend.core.model.metadata.QInstance; -import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QBackendStepMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendStepMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QFunctionInputMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QFunctionOutputMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QRecordListMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; +import com.kingsrook.qqq.backend.core.modules.authentication.metadata.Auth0AuthenticationMetaData; +import com.kingsrook.qqq.backend.core.modules.authentication.metadata.QAuthenticationMetaData; import com.kingsrook.qqq.backend.core.processes.implementations.general.LoadInitialRecordsStep; +import com.kingsrook.qqq.backend.core.processes.implementations.mock.MockBackendStep; import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.Cardinality; import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.RecordFormat; import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemBackendMetaData; @@ -60,6 +61,10 @@ public class SampleMetaDataProvider public static final String MYSQL_BACKEND_NAME = "mysql"; public static final String FILESYSTEM_BACKEND_NAME = "filesystem"; + public static final String AUTH0_AUTHENTICATION_MODULE_NAME = "auth0"; + public static final String AUTH0_BASE_URL = "https://kingsrook.us.auth0.com/"; + + public static final String PROCESS_NAME_GREET = "greet"; public static final String PROCESS_NAME_GREET_INTERACTIVE = "greetInteractive"; public static final String PROCESS_NAME_SIMPLE_SLEEP = "simpleSleep"; @@ -103,9 +108,9 @@ public class SampleMetaDataProvider *******************************************************************************/ private static QAuthenticationMetaData defineAuthentication() { - return new QAuthenticationMetaData() - .withName("Anonymous") - .withType("fullyAnonymous"); + return (new Auth0AuthenticationMetaData() + .withBaseUrl(AUTH0_BASE_URL) + .withName(AUTH0_AUTHENTICATION_MODULE_NAME)); } From 3cb3da9762e0f74441d288d3c839f6499003e563 Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Tue, 26 Jul 2022 10:17:21 -0500 Subject: [PATCH 4/6] QQQ-27: changed to use mock authentication --- .../com/kingsrook/sampleapp/SampleMetaDataProvider.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index 197d44db..02ec55f7 100644 --- a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -28,6 +28,7 @@ import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QValueException; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; +import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationType; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; @@ -42,7 +43,6 @@ import com.kingsrook.qqq.backend.core.model.metadata.processes.QFunctionOutputMe import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QRecordListMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; -import com.kingsrook.qqq.backend.core.modules.authentication.metadata.Auth0AuthenticationMetaData; import com.kingsrook.qqq.backend.core.modules.authentication.metadata.QAuthenticationMetaData; import com.kingsrook.qqq.backend.core.processes.implementations.general.LoadInitialRecordsStep; import com.kingsrook.qqq.backend.core.processes.implementations.mock.MockBackendStep; @@ -108,9 +108,9 @@ public class SampleMetaDataProvider *******************************************************************************/ private static QAuthenticationMetaData defineAuthentication() { - return (new Auth0AuthenticationMetaData() - .withBaseUrl(AUTH0_BASE_URL) - .withName(AUTH0_AUTHENTICATION_MODULE_NAME)); + return (new QAuthenticationMetaData() + .withName("mock") + .withType(QAuthenticationType.MOCK)); } From 2f6c094de839ca5d1cecd83a68994c8aa9bfb7bc Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Tue, 26 Jul 2022 16:55:23 -0500 Subject: [PATCH 5/6] Update deps --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 40e9acc7..06ff5538 100644 --- a/pom.xml +++ b/pom.xml @@ -49,27 +49,27 @@ com.kingsrook.qqq qqq-backend-core - 0.2.0-20220725.183211-13 + 0.2.0-20220726.214150-15 com.kingsrook.qqq qqq-backend-module-rdbms - 0.2.0-20220725.183409-11 + 0.2.0-20220726.214633-12 com.kingsrook.qqq qqq-backend-module-filesystem - 0.2.0-20220725.183815-7 + 0.2.0-20220726.215110-8 com.kingsrook.qqq qqq-middleware-javalin - 0.2.0-20220725.185458-5 + 0.2.0-20220726.215233-6 com.kingsrook.qqq qqq-middleware-picocli - 0.2.0-20220725.185021-4 + 0.2.0-20220726.215232-6 From 597d6ef519abfe3b6c9e9ed7d5c90608a3cc6c7c Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Wed, 27 Jul 2022 23:45:52 -0500 Subject: [PATCH 6/6] QQQ-27: gitignore .env updated to pull rdbms password from .env --- .gitignore | 1 + .../java/com/kingsrook/sampleapp/SampleMetaDataProvider.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cb6506b2..e61508f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ target/ *.iml +.env ############################################# diff --git a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index 02ec55f7..b8f1020d 100644 --- a/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -51,6 +51,7 @@ import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.RecordFor import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemBackendMetaData; import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemTableBackendDetails; import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; +import io.github.cdimascio.dotenv.Dotenv; /******************************************************************************* @@ -120,13 +121,14 @@ public class SampleMetaDataProvider *******************************************************************************/ public static QBackendMetaData defineMysqlBackend() { + Dotenv dotenv = Dotenv.configure().load(); return new RDBMSBackendMetaData() .withVendor("mysql") .withHostName("127.0.0.1") .withPort(3306) .withDatabaseName("qqq") .withUsername("root") - .withPassword("8BNWyoav8s79oi}Lqk") + .withPassword(dotenv.get("RDBMS_PASSWORD")) .withName(MYSQL_BACKEND_NAME); }