mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
Updating to support multi-file scripts
This commit is contained in:
@ -31,6 +31,8 @@ import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
|
|||||||
import com.kingsrook.qqq.backend.core.actions.tables.QueryAction;
|
import com.kingsrook.qqq.backend.core.actions.tables.QueryAction;
|
||||||
import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
|
import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
|
||||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
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.scripts.StoreAssociatedScriptInput;
|
import com.kingsrook.qqq.backend.core.model.actions.scripts.StoreAssociatedScriptInput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.scripts.StoreAssociatedScriptOutput;
|
import com.kingsrook.qqq.backend.core.model.actions.scripts.StoreAssociatedScriptOutput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput;
|
||||||
@ -47,6 +49,7 @@ 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.data.QRecord;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.AssociatedScript;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.AssociatedScript;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.core.processes.implementations.scripts.StoreScriptRevisionProcessStep;
|
||||||
import com.kingsrook.qqq.backend.core.utils.StringUtils;
|
import com.kingsrook.qqq.backend.core.utils.StringUtils;
|
||||||
|
|
||||||
|
|
||||||
@ -180,41 +183,19 @@ public class StoreAssociatedScriptAction
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QRecord scriptRevision = new QRecord()
|
RunBackendStepInput storeScriptRevisionInput = new RunBackendStepInput();
|
||||||
.withValue("scriptId", script.getValue("id"))
|
storeScriptRevisionInput.addValue("scriptId", script.getValue("id"));
|
||||||
.withValue("contents", input.getCode())
|
storeScriptRevisionInput.addValue("commitMessage", commitMessage);
|
||||||
.withValue("apiName", input.getApiName())
|
storeScriptRevisionInput.addValue("apiName", input.getApiName());
|
||||||
.withValue("apiVersion", input.getApiVersion())
|
storeScriptRevisionInput.addValue("apiVersion", input.getApiVersion());
|
||||||
.withValue("commitMessage", commitMessage)
|
storeScriptRevisionInput.addValue("fileNames", "script");
|
||||||
.withValue("sequenceNo", nextSequenceNo);
|
storeScriptRevisionInput.addValue("fileContents:script", input.getCode());
|
||||||
|
RunBackendStepOutput storeScriptRevisionOutput = new RunBackendStepOutput();
|
||||||
try
|
new StoreScriptRevisionProcessStep().run(storeScriptRevisionInput, storeScriptRevisionOutput);
|
||||||
{
|
|
||||||
scriptRevision.setValue("author", input.getSession().getUser().getFullName());
|
|
||||||
}
|
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
scriptRevision.setValue("author", "Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
InsertInput insertInput = new InsertInput();
|
|
||||||
insertInput.setTableName("scriptRevision");
|
|
||||||
insertInput.setRecords(List.of(scriptRevision));
|
|
||||||
InsertOutput insertOutput = new InsertAction().execute(insertInput);
|
|
||||||
scriptRevision = insertOutput.getRecords().get(0);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
|
||||||
// update the script to point at the new revision //
|
|
||||||
////////////////////////////////////////////////////
|
|
||||||
script.setValue("currentScriptRevisionId", scriptRevision.getValue("id"));
|
|
||||||
UpdateInput updateInput = new UpdateInput();
|
|
||||||
updateInput.setTableName("script");
|
|
||||||
updateInput.setRecords(List.of(script));
|
|
||||||
new UpdateAction().execute(updateInput);
|
|
||||||
|
|
||||||
output.setScriptId(script.getValueInteger("id"));
|
output.setScriptId(script.getValueInteger("id"));
|
||||||
output.setScriptName(script.getValueString("name"));
|
output.setScriptName(script.getValueString("name"));
|
||||||
output.setScriptRevisionId(scriptRevision.getValueInteger("id"));
|
output.setScriptRevisionId(storeScriptRevisionOutput.getValueInteger("scriptRevisionId"));
|
||||||
output.setScriptRevisionSequenceNo(scriptRevision.getValueInteger("sequenceNo"));
|
output.setScriptRevisionSequenceNo(storeScriptRevisionOutput.getValueInteger("scriptRevisionSequenceNo"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,8 @@ 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.fields.QFieldType;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.AssociatedScript;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.AssociatedScript;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.scripts.Script;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.scripts.ScriptRevisionFile;
|
||||||
import com.kingsrook.qqq.backend.core.model.scripts.ScriptsMetaDataProvider;
|
import com.kingsrook.qqq.backend.core.model.scripts.ScriptsMetaDataProvider;
|
||||||
import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryRecordStore;
|
import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryRecordStore;
|
||||||
import com.kingsrook.qqq.backend.core.utils.TestUtils;
|
import com.kingsrook.qqq.backend.core.utils.TestUtils;
|
||||||
@ -100,7 +102,8 @@ class StoreAssociatedScriptActionTest extends BaseTest
|
|||||||
StoreAssociatedScriptInput storeAssociatedScriptInput = new StoreAssociatedScriptInput();
|
StoreAssociatedScriptInput storeAssociatedScriptInput = new StoreAssociatedScriptInput();
|
||||||
storeAssociatedScriptInput.setTableName(TestUtils.TABLE_NAME_PERSON_MEMORY);
|
storeAssociatedScriptInput.setTableName(TestUtils.TABLE_NAME_PERSON_MEMORY);
|
||||||
storeAssociatedScriptInput.setRecordPrimaryKey(1);
|
storeAssociatedScriptInput.setRecordPrimaryKey(1);
|
||||||
storeAssociatedScriptInput.setCode("var i = 0;");
|
String code = "var i = 0;";
|
||||||
|
storeAssociatedScriptInput.setCode(code);
|
||||||
storeAssociatedScriptInput.setCommitMessage("Test commit");
|
storeAssociatedScriptInput.setCommitMessage("Test commit");
|
||||||
storeAssociatedScriptInput.setFieldName("testScriptId");
|
storeAssociatedScriptInput.setFieldName("testScriptId");
|
||||||
StoreAssociatedScriptOutput storeAssociatedScriptOutput = new StoreAssociatedScriptOutput();
|
StoreAssociatedScriptOutput storeAssociatedScriptOutput = new StoreAssociatedScriptOutput();
|
||||||
@ -110,26 +113,33 @@ class StoreAssociatedScriptActionTest extends BaseTest
|
|||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
||||||
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "testScriptId", 1);
|
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "testScriptId", 1);
|
||||||
assertValueInField(instance, "script", 1, "currentScriptRevisionId", 1);
|
assertValueInField(instance, Script.TABLE_NAME, 1, "currentScriptRevisionId", 1);
|
||||||
|
assertValueInField(instance, ScriptRevisionFile.TABLE_NAME, 1, "contents", code);
|
||||||
|
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
// add 2nd version of script for record 1 //
|
// add 2nd version of script for record 1 //
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
storeAssociatedScriptInput.setCode("var i = 1;");
|
code = "var i = 1;";
|
||||||
|
storeAssociatedScriptInput.setCode(code);
|
||||||
storeAssociatedScriptInput.setCommitMessage("2nd commit");
|
storeAssociatedScriptInput.setCommitMessage("2nd commit");
|
||||||
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
||||||
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "testScriptId", 1);
|
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "testScriptId", 1);
|
||||||
assertValueInField(instance, "script", 1, "currentScriptRevisionId", 2);
|
assertValueInField(instance, Script.TABLE_NAME, 1, "currentScriptRevisionId", 2);
|
||||||
|
assertValueInField(instance, ScriptRevisionFile.TABLE_NAME, 2, "contents", code);
|
||||||
|
assertValueInField(instance, ScriptRevisionFile.TABLE_NAME, 2, "scriptRevisionId", 2);
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
// insert 1st version of script for record 3 //
|
// insert 1st version of script for record 3 //
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
|
code = "var i = 2;";
|
||||||
storeAssociatedScriptInput.setRecordPrimaryKey(3);
|
storeAssociatedScriptInput.setRecordPrimaryKey(3);
|
||||||
storeAssociatedScriptInput.setCode("var i = 2;");
|
storeAssociatedScriptInput.setCode(code);
|
||||||
storeAssociatedScriptInput.setCommitMessage("First Commit here");
|
storeAssociatedScriptInput.setCommitMessage("First Commit here");
|
||||||
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
||||||
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 3, "testScriptId", 2);
|
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 3, "testScriptId", 2);
|
||||||
assertValueInField(instance, "script", 2, "currentScriptRevisionId", 3);
|
assertValueInField(instance, Script.TABLE_NAME, 2, "currentScriptRevisionId", 3);
|
||||||
|
assertValueInField(instance, ScriptRevisionFile.TABLE_NAME, 3, "contents", code);
|
||||||
|
assertValueInField(instance, ScriptRevisionFile.TABLE_NAME, 3, "scriptRevisionId", 3);
|
||||||
|
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// make sure no script on record 2 //
|
// make sure no script on record 2 //
|
||||||
@ -146,7 +156,7 @@ class StoreAssociatedScriptActionTest extends BaseTest
|
|||||||
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
new StoreAssociatedScriptAction().run(storeAssociatedScriptInput, storeAssociatedScriptOutput);
|
||||||
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "testScriptId", 1);
|
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "testScriptId", 1);
|
||||||
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "otherScriptId", 3);
|
assertValueInField(instance, TestUtils.TABLE_NAME_PERSON_MEMORY, 1, "otherScriptId", 3);
|
||||||
assertValueInField(instance, "script", 3, "currentScriptRevisionId", 4);
|
assertValueInField(instance, Script.TABLE_NAME, 3, "currentScriptRevisionId", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user