diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java index e91b1440..95b8cdbe 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java @@ -168,7 +168,12 @@ public class InsertAction extends AbstractQActionFunction. + */ + +package com.kingsrook.qqq.backend.core.model.actions.tables; + + +/******************************************************************************* + ** interface to define input sources - idea being, so QQQ can have its standard + ** ones (see QInputSource), but applications can define their own as well. + ** + ** We might imagine things like a user's session dictating what InputSource + ** gets passed into all DML actions. Or perhaps API meta-data, or just a method + ** on QInstance in the future? + ** + ** We might imagine, maybe, more methods growing in the future... + *******************************************************************************/ +public interface InputSource +{ + + /******************************************************************************* + ** + *******************************************************************************/ + boolean shouldValidateRequiredFields(); + +} diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/QInputSource.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/QInputSource.java new file mode 100644 index 00000000..854c18cc --- /dev/null +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/QInputSource.java @@ -0,0 +1,56 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2023. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.backend.core.model.actions.tables; + + +/******************************************************************************* + ** QQQ standard input sources -- the system, or users. + *******************************************************************************/ +public enum QInputSource implements InputSource +{ + SYSTEM(true), + USER(true); + + + private final boolean shouldValidateRequiredFields; + + + + /******************************************************************************* + ** + *******************************************************************************/ + QInputSource(boolean shouldValidateRequiredFields) + { + this.shouldValidateRequiredFields = shouldValidateRequiredFields; + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public boolean shouldValidateRequiredFields() + { + return (this.shouldValidateRequiredFields); + } +} diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java index 7ffcb203..53e3af78 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/delete/DeleteInput.java @@ -26,6 +26,8 @@ import java.io.Serializable; import java.util.List; import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.utils.collections.MutableList; @@ -39,6 +41,7 @@ public class DeleteInput extends AbstractTableActionInput private QBackendTransaction transaction; private List primaryKeys; private QQueryFilter queryFilter; + private InputSource inputSource = QInputSource.SYSTEM; @@ -154,4 +157,35 @@ public class DeleteInput extends AbstractTableActionInput return this; } + + + /******************************************************************************* + ** Getter for inputSource + *******************************************************************************/ + public InputSource getInputSource() + { + return (this.inputSource); + } + + + + /******************************************************************************* + ** Setter for inputSource + *******************************************************************************/ + public void setInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + } + + + + /******************************************************************************* + ** Fluent setter for inputSource + *******************************************************************************/ + public DeleteInput withInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + return (this); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java index fa716a79..9a0492a6 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/insert/InsertInput.java @@ -25,6 +25,8 @@ package com.kingsrook.qqq.backend.core.model.actions.tables.insert; import java.util.List; import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.data.QRecord; @@ -36,6 +38,7 @@ public class InsertInput extends AbstractTableActionInput { private QBackendTransaction transaction; private List records; + private InputSource inputSource = QInputSource.SYSTEM; private boolean skipUniqueKeyCheck = false; @@ -182,4 +185,35 @@ public class InsertInput extends AbstractTableActionInput return (this); } + + + /******************************************************************************* + ** Getter for inputSource + *******************************************************************************/ + public InputSource getInputSource() + { + return (this.inputSource); + } + + + + /******************************************************************************* + ** Setter for inputSource + *******************************************************************************/ + public void setInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + } + + + + /******************************************************************************* + ** Fluent setter for inputSource + *******************************************************************************/ + public InsertInput withInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + return (this); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java index 0554874b..2ae55f37 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/tables/update/UpdateInput.java @@ -25,6 +25,8 @@ package com.kingsrook.qqq.backend.core.model.actions.tables.update; import java.util.List; import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.data.QRecord; @@ -36,6 +38,7 @@ public class UpdateInput extends AbstractTableActionInput { private QBackendTransaction transaction; private List records; + private InputSource inputSource = QInputSource.SYSTEM; //////////////////////////////////////////////////////////////////////////////////////////// // allow a caller to specify that they KNOW this optimization (e.g., in SQL) can be made. // @@ -219,4 +222,35 @@ public class UpdateInput extends AbstractTableActionInput return (this); } + + + /******************************************************************************* + ** Getter for inputSource + *******************************************************************************/ + public InputSource getInputSource() + { + return (this.inputSource); + } + + + + /******************************************************************************* + ** Setter for inputSource + *******************************************************************************/ + public void setInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + } + + + + /******************************************************************************* + ** Fluent setter for inputSource + *******************************************************************************/ + public UpdateInput withInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + return (this); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java index 18f7c5a4..0b50d953 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteLoadStep.java @@ -36,6 +36,8 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine 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.actions.processes.Status; +import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; @@ -60,6 +62,17 @@ public class BulkDeleteLoadStep extends LoadViaDeleteStep implements ProcessSumm + /******************************************************************************* + ** + *******************************************************************************/ + @Override + protected InputSource getInputSource() + { + return (QInputSource.USER); + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java index 6480774c..95df5260 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/delete/BulkDeleteTransformStep.java @@ -33,6 +33,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine 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.actions.processes.Status; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; @@ -103,6 +104,7 @@ public class BulkDeleteTransformStep extends AbstractTransformStep /////////////////////////////////////////////////////////////////////// DeleteAction deleteAction = new DeleteAction(); DeleteInput deleteInput = new DeleteInput(); + deleteInput.setInputSource(QInputSource.USER); deleteInput.setTableName(runBackendStepInput.getTableName()); deleteInput.setPrimaryKeys(runBackendStepInput.getRecords().stream().map(r -> r.getValue(primaryKeyField)).toList()); List validationResultRecords = deleteAction.performValidations(deleteInput, Optional.of(runBackendStepInput.getRecords()), true); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java index 561dee43..c05c2b64 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditLoadStep.java @@ -31,6 +31,8 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine 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.actions.processes.Status; +import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.LoadViaUpdateStep; @@ -56,6 +58,17 @@ public class BulkEditLoadStep extends LoadViaUpdateStep implements ProcessSummar + /******************************************************************************* + ** + *******************************************************************************/ + @Override + protected InputSource getInputSource() + { + return (QInputSource.USER); + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java index 8fb095e3..077a9f29 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/edit/BulkEditTransformStep.java @@ -37,6 +37,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine 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.actions.processes.Status; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; @@ -167,6 +168,7 @@ public class BulkEditTransformStep extends AbstractTransformStep // run the validation - critically - in preview mode (boolean param) // /////////////////////////////////////////////////////////////////////// UpdateInput updateInput = new UpdateInput(); + updateInput.setInputSource(QInputSource.USER); updateInput.setTableName(table.getName()); updateInput.setRecords(recordsForValidation); new UpdateAction().performValidations(updateInput, Optional.of(runBackendStepInput.getRecords()), true); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertLoadStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertLoadStep.java new file mode 100644 index 00000000..c8b73ec2 --- /dev/null +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertLoadStep.java @@ -0,0 +1,45 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2023. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.backend.core.processes.implementations.bulk.insert; + + +import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; +import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.LoadViaInsertStep; + + +/******************************************************************************* + ** + *******************************************************************************/ +public class BulkInsertLoadStep extends LoadViaInsertStep +{ + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + protected InputSource getInputSource() + { + return (QInputSource.USER); + } + +} diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java index b775098d..36b29c04 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/bulk/insert/BulkInsertTransformStep.java @@ -38,6 +38,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessSummaryLine 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.actions.processes.Status; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; @@ -182,6 +183,7 @@ public class BulkInsertTransformStep extends AbstractTransformStep ///////////////////////////////////////////////////////////////////////////////// InsertAction insertAction = new InsertAction(); InsertInput insertInput = new InsertInput(); + insertInput.setInputSource(QInputSource.USER); insertInput.setTableName(runBackendStepInput.getTableName()); insertInput.setRecords(recordsWithoutUkErrors); insertInput.setSkipUniqueKeyCheck(true); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java index fa0ebb9a..66589432 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java @@ -30,6 +30,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.exceptions.QException; 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.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; @@ -46,6 +48,16 @@ public class LoadViaDeleteStep extends AbstractLoadStep + /******************************************************************************* + ** + *******************************************************************************/ + protected InputSource getInputSource() + { + return (QInputSource.SYSTEM); + } + + + /******************************************************************************* ** Execute the backend step - using the request as input, and the result as output. ** @@ -56,6 +68,7 @@ public class LoadViaDeleteStep extends AbstractLoadStep QTableMetaData table = runBackendStepInput.getTable(); DeleteInput deleteInput = new DeleteInput(); + deleteInput.setInputSource(getInputSource()); deleteInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); deleteInput.setPrimaryKeys(runBackendStepInput.getRecords().stream().map(r -> r.getValue(table.getPrimaryKeyField())).collect(Collectors.toList())); deleteInput.setAsyncJobCallback(runBackendStepInput.getAsyncJobCallback()); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java index 45d09c96..0263fe5a 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java @@ -31,6 +31,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; import com.kingsrook.qqq.backend.core.exceptions.QException; 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.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; @@ -56,6 +58,16 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep + /******************************************************************************* + ** + *******************************************************************************/ + protected InputSource getInputSource() + { + return (QInputSource.SYSTEM); + } + + + /******************************************************************************* ** Execute the backend step - using the request as input, and the result as output. ** @@ -79,6 +91,7 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep if(CollectionUtils.nullSafeHasContents(recordsToInsert)) { InsertInput insertInput = new InsertInput(); + insertInput.setInputSource(getInputSource()); insertInput.setTableName(tableMetaData.getName()); insertInput.setRecords(recordsToInsert); getTransaction().ifPresent(insertInput::setTransaction); @@ -96,6 +109,7 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep if(CollectionUtils.nullSafeHasContents(recordsToUpdate)) { UpdateInput updateInput = new UpdateInput(); + updateInput.setInputSource(getInputSource()); updateInput.setTableName(tableMetaData.getName()); updateInput.setRecords(recordsToUpdate); getTransaction().ifPresent(updateInput::setTransaction); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java index 6024b21a..a5f9718b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java @@ -28,6 +28,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.exceptions.QException; 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.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput; @@ -43,6 +45,16 @@ public class LoadViaInsertStep extends AbstractLoadStep + /******************************************************************************* + ** + *******************************************************************************/ + protected InputSource getInputSource() + { + return (QInputSource.SYSTEM); + } + + + /******************************************************************************* ** Execute the backend step - using the request as input, and the result as output. ** @@ -51,6 +63,7 @@ public class LoadViaInsertStep extends AbstractLoadStep public void run(RunBackendStepInput runBackendStepInput, RunBackendStepOutput runBackendStepOutput) throws QException { InsertInput insertInput = new InsertInput(); + insertInput.setInputSource(getInputSource()); insertInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); insertInput.setRecords(runBackendStepInput.getRecords()); getTransaction().ifPresent(insertInput::setTransaction); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java index 058c5ec2..2f1755ec 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java @@ -29,6 +29,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; import com.kingsrook.qqq.backend.core.exceptions.QException; 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.actions.tables.InputSource; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateOutput; @@ -44,6 +46,16 @@ public class LoadViaUpdateStep extends AbstractLoadStep + /******************************************************************************* + ** + *******************************************************************************/ + protected InputSource getInputSource() + { + return (QInputSource.SYSTEM); + } + + + /******************************************************************************* ** Execute the backend step - using the request as input, and the result as output. ** @@ -52,6 +64,7 @@ public class LoadViaUpdateStep extends AbstractLoadStep public void run(RunBackendStepInput runBackendStepInput, RunBackendStepOutput runBackendStepOutput) throws QException { UpdateInput updateInput = new UpdateInput(); + updateInput.setInputSource(getInputSource()); updateInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); updateInput.setRecords(runBackendStepInput.getRecords()); getTransaction().ifPresent(updateInput::setTransaction); diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java index a9224655..058036d6 100644 --- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiImplementation.java @@ -49,6 +49,7 @@ import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QNotFoundException; import com.kingsrook.qqq.backend.core.logging.LogPair; import com.kingsrook.qqq.backend.core.logging.QLogger; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput; import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; @@ -336,6 +337,7 @@ public class ApiImplementation String tableName = table.getName(); InsertInput insertInput = new InsertInput(); + insertInput.setInputSource(QInputSource.USER); insertInput.setTableName(tableName); @@ -409,6 +411,7 @@ public class ApiImplementation String tableName = table.getName(); InsertInput insertInput = new InsertInput(); + insertInput.setInputSource(QInputSource.USER); insertInput.setTableName(tableName); PermissionsHelper.checkTablePermissionThrowing(insertInput, TablePermissionSubType.INSERT); @@ -549,6 +552,7 @@ public class ApiImplementation String tableName = table.getName(); UpdateInput updateInput = new UpdateInput(); + updateInput.setInputSource(QInputSource.USER); updateInput.setTableName(tableName); PermissionsHelper.checkTablePermissionThrowing(updateInput, TablePermissionSubType.EDIT); @@ -620,6 +624,7 @@ public class ApiImplementation String tableName = table.getName(); UpdateInput updateInput = new UpdateInput(); + updateInput.setInputSource(QInputSource.USER); updateInput.setTableName(tableName); PermissionsHelper.checkTablePermissionThrowing(updateInput, TablePermissionSubType.EDIT); @@ -744,6 +749,7 @@ public class ApiImplementation String tableName = table.getName(); DeleteInput deleteInput = new DeleteInput(); + deleteInput.setInputSource(QInputSource.USER); deleteInput.setTableName(tableName); deleteInput.setPrimaryKeys(List.of(primaryKey)); @@ -784,6 +790,7 @@ public class ApiImplementation String tableName = table.getName(); DeleteInput deleteInput = new DeleteInput(); + deleteInput.setInputSource(QInputSource.USER); deleteInput.setTableName(tableName); PermissionsHelper.checkTablePermissionThrowing(deleteInput, TablePermissionSubType.DELETE); diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java index 302aa3ca..d0a5aab9 100644 --- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java +++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java @@ -75,6 +75,7 @@ import com.kingsrook.qqq.backend.core.model.actions.metadata.TableMetaDataOutput import com.kingsrook.qqq.backend.core.model.actions.reporting.ExportInput; import com.kingsrook.qqq.backend.core.model.actions.reporting.ExportOutput; import com.kingsrook.qqq.backend.core.model.actions.reporting.ReportFormat; +import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput; import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; @@ -573,6 +574,7 @@ public class QJavalinImplementation primaryKeys.add(primaryKey); DeleteInput deleteInput = new DeleteInput(); + deleteInput.setInputSource(QInputSource.USER); setupSession(context, deleteInput); QJavalinAccessLogger.logStart("delete", logPair("table", table), logPair("primaryKey", primaryKey)); @@ -608,6 +610,7 @@ public class QJavalinImplementation try { UpdateInput updateInput = new UpdateInput(); + updateInput.setInputSource(QInputSource.USER); setupSession(context, updateInput); updateInput.setTableName(tableName); @@ -680,6 +683,7 @@ public class QJavalinImplementation try { InsertInput insertInput = new InsertInput(); + insertInput.setInputSource(QInputSource.USER); setupSession(context, insertInput); insertInput.setTableName(tableName); QJavalinAccessLogger.logStart("insert", logPair("table", tableName));