diff --git a/packages/server/src/api/controllers/record.js b/packages/server/src/api/controllers/record.js
index f9cea706f5..8fc041c6af 100644
--- a/packages/server/src/api/controllers/record.js
+++ b/packages/server/src/api/controllers/record.js
@@ -53,7 +53,6 @@ exports.patch = async function(ctx) {
ctx.body = record
ctx.status = 200
ctx.message = `${model.name} updated successfully.`
- return
}
exports.save = async function(ctx) {
diff --git a/packages/server/src/api/controllers/user.js b/packages/server/src/api/controllers/user.js
index d4525974f9..22cf2d2a3c 100644
--- a/packages/server/src/api/controllers/user.js
+++ b/packages/server/src/api/controllers/user.js
@@ -58,6 +58,7 @@ exports.create = async function(ctx) {
ctx.message = "User created successfully."
ctx.body = {
_rev: response.rev,
+ _id: user._id,
username,
name,
}
diff --git a/packages/server/src/api/controllers/workflow/blockDefinitions.js b/packages/server/src/api/controllers/workflow/blockDefinitions.js
index f713823245..7cd0f8ab05 100644
--- a/packages/server/src/api/controllers/workflow/blockDefinitions.js
+++ b/packages/server/src/api/controllers/workflow/blockDefinitions.js
@@ -1,28 +1,72 @@
+let accessLevels = require("../../../utilities/accessLevels")
+let conditions = require("../../../workflows/logic").LogicConditions
+
const ACTION = {
SAVE_RECORD: {
name: "Save Record",
tagline: "Save a {{record.model.name}} record",
icon: "ri-save-3-fill",
- description: "Save a record to your database.",
- params: {
- record: "record",
- },
- args: {
- record: {},
- },
+ description: "Save a record to your database",
type: "ACTION",
+ input: {
+ record: {
+ type: "record",
+ label: "The record to be written",
+ default: {},
+ },
+ model: {
+ type: "model",
+ label: "The table to save a record to",
+ },
+ },
+ output: {
+ response: {
+ type: "object",
+ label: "The response from the table",
+ },
+ success: {
+ type: "boolean",
+ label: "Whether the action was successful",
+ },
+ id: {
+ type: "string",
+ label: "The identifier of the new record",
+ },
+ revision: {
+ type: "string",
+ label: "The revision of the new record",
+ },
+ },
},
DELETE_RECORD: {
- description: "Delete a record from your database.",
+ description: "Delete a record from your database",
icon: "ri-delete-bin-line",
name: "Delete Record",
tagline: "Delete a {{record.model.name}} record",
- params: {},
- args: {},
type: "ACTION",
+ input: {
+ id: {
+ type: "string",
+ label: "The identifier of the record to be deleted",
+ },
+ revision: {
+ type: "string",
+ label: "The revision of the record to be deleted",
+ },
+ },
+ output: {
+ response: {
+ type: "object",
+ label: "The response from the table",
+ },
+ success: {
+ type: "boolean",
+ label: "Whether the action was successful",
+ },
+ },
},
CREATE_USER: {
- description: "Create a new user.",
+ description: "Create a new user",
tagline: "Create user {{username}}",
icon: "ri-user-add-fill",
name: "Create User",
@@ -35,6 +79,40 @@ const ACTION = {
accessLevelId: "POWER_USER",
},
type: "ACTION",
+ input: {
+ username: {
+ type: "string",
+ label: "The username of the new user to create",
+ },
+ password: {
+ type: "password",
+ label: "The password of the new user to create",
+ },
+ accessLevelId: {
+ type: "string",
+ label: "The level of access to the system the new user will have",
+ default: accessLevels.POWERUSER_LEVEL_ID,
+ options: accessLevels.ACCESS_LEVELS,
+ },
+ },
+ output: {
+ id: {
+ type: "string",
+ label: "The identifier of the new user",
+ },
+ revision: {
+ type: "string",
+ label: "The revision of the new user",
+ },
+ response: {
+ type: "object",
+ label: "The response from the user table",
+ },
+ success: {
+ type: "boolean",
+ label: "Whether the action was successful",
+ },
+ },
},
SEND_EMAIL: {
description: "Send an email.",
@@ -48,6 +126,34 @@ const ACTION = {
text: "longText",
},
type: "ACTION",
+ input: {
+ to: {
+ type: "string",
+ label: "Email address to send email to",
+ },
+ from: {
+ type: "string",
+ label: "Email address to send email from",
+ },
+ subject: {
+ type: "string",
+ label: "The subject of the email",
+ },
+ contents: {
+ type: "string",
+ label: "The contents of the email",
+ },
+ },
+ output: {
+ success: {
+ type: "boolean",
+ label: "Whether the email was sent",
+ },
+ response: {
+ type: "object",
+ label: "A response from the email client, this may be an error",
+ },
+ },
},
}
@@ -56,7 +162,7 @@ const LOGIC = {
name: "Filter",
tagline: "{{filter}} {{condition}} {{value}}",
icon: "ri-git-branch-line",
- description: "Filter any workflows which do not meet certain conditions.",
+ description: "Filter any workflows which do not meet certain conditions",
params: {
filter: "string",
condition: ["equals"],
@@ -66,14 +172,38 @@ const LOGIC = {
condition: "equals",
},
type: "LOGIC",
+ input: {
+ field: {
+ type: "string",
+ label: "The input to filter on",
+ },
+ condition: {
+ type: "string",
+ label: "The condition to use for filtering",
+ options: conditions,
+ },
+ value: {
+ type: "string",
+ label: "The value to compare against",
+ },
+ },
+ output: {
+ success: {
+ type: "boolean",
+ label: "Whether the logic block passed",
+ },
+ },
},
DELAY: {
name: "Delay",
icon: "ri-time-fill",
tagline: "Delay for {{time}} milliseconds",
- description: "Delay the workflow until an amount of time has passed.",
- params: {
- time: "number",
+ description: "Delay the workflow until an amount of time has passed",
+ input: {
+ time: {
+ type: "number",
+ label: "The duration of the delay in milliseconds",
+ },
},
type: "LOGIC",
},
@@ -85,9 +215,18 @@ const TRIGGER = {
event: "record:save",
icon: "ri-save-line",
tagline: "Record is added to {{model.name}}",
- description: "Fired when a record is saved to your database.",
- params: {
- model: "model",
+ description: "Fired when a record is saved to your database",
+ input: {
+ model: {
+ type: "model",
+ label: "The table to trigger on when a new record is saved",
+ },
+ },
+ output: {
+ record: {
+ type: "record",
+ label: "The new record that was saved",
+ },
},
type: "TRIGGER",
},
@@ -96,9 +235,18 @@ const TRIGGER = {
event: "record:delete",
icon: "ri-delete-bin-line",
tagline: "Record is deleted from {{model.name}}",
- description: "Fired when a record is deleted from your database.",
- params: {
- model: "model",
+ description: "Fired when a record is deleted from your database",
+ input: {
+ model: {
+ type: "model",
+ label: "The table to trigger on when a record is deleted",
+ },
+ },
+ output: {
+ record: {
+ type: "record",
+ label: "The record that was deleted",
+ },
},
type: "TRIGGER",
},
diff --git a/packages/server/src/utilities/accessLevels.js b/packages/server/src/utilities/accessLevels.js
index 50ae559d07..bc8ae4cb77 100644
--- a/packages/server/src/utilities/accessLevels.js
+++ b/packages/server/src/utilities/accessLevels.js
@@ -87,6 +87,12 @@ module.exports = {
POWERUSER_LEVEL_ID,
BUILDER_LEVEL_ID,
ANON_LEVEL_ID,
+ ACCESS_LEVELS: [
+ ADMIN_LEVEL_ID,
+ POWERUSER_LEVEL_ID,
+ BUILDER_LEVEL_ID,
+ ANON_LEVEL_ID,
+ ],
READ_MODEL,
WRITE_MODEL,
READ_VIEW,
diff --git a/packages/server/src/workflows/actions.js b/packages/server/src/workflows/actions.js
index 1dd3aa694d..626a0af922 100644
--- a/packages/server/src/workflows/actions.js
+++ b/packages/server/src/workflows/actions.js
@@ -17,14 +17,18 @@ let BUILTIN_ACTIONS = {
}
try {
- const response = await userController.create(ctx)
+ await userController.create(ctx)
return {
- user: response,
+ response: ctx.body,
+ id: ctx.body._id,
+ revision: ctx.body._rev,
+ success: ctx.status === 200,
}
} catch (err) {
console.error(err)
return {
- user: null,
+ success: false,
+ response: err,
}
}
},
@@ -45,13 +49,16 @@ let BUILTIN_ACTIONS = {
try {
await recordController.save(ctx)
return {
- record: ctx.body,
+ response: ctx.body,
+ id: ctx.body._id,
+ revision: ctx.body._rev,
+ success: ctx.status === 200,
}
} catch (err) {
console.error(err)
return {
- record: null,
- error: err.message,
+ success: false,
+ response: err,
}
}
},
@@ -67,13 +74,12 @@ let BUILTIN_ACTIONS = {
await sgMail.send(msg)
return {
success: true,
- ...args,
}
} catch (err) {
console.error(err)
return {
success: false,
- error: err.message,
+ response: err,
}
}
},
@@ -94,11 +100,15 @@ let BUILTIN_ACTIONS = {
try {
await recordController.destroy(ctx)
+ return {
+ response: ctx.body,
+ success: ctx.status === 200,
+ }
} catch (err) {
console.error(err)
return {
- record: null,
- error: err.message,
+ success: false,
+ response: err,
}
}
},
diff --git a/packages/server/src/workflows/logic.js b/packages/server/src/workflows/logic.js
index a1d71bc0f2..376a712a4d 100644
--- a/packages/server/src/workflows/logic.js
+++ b/packages/server/src/workflows/logic.js
@@ -22,3 +22,10 @@ module.exports.getLogic = function(logicName) {
return LOGIC[logicName]
}
}
+
+module.exports.LogicConditions = [
+ "equals",
+ "notEquals",
+ "greaterThan",
+ "lessThan",
+]