-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Components] mitra #14368
base: master
Are you sure you want to change the base?
[Components] mitra #14368
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
import app from "../../mitra.app.mjs"; | ||
|
||
export default { | ||
key: "mitra-delete-data", | ||
name: "Delete Data", | ||
description: "Deletes a record from a table in the Mitra database. [See the documentation]()", // Add documentation link if available | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
tableName: { | ||
propDefinition: [ | ||
app, | ||
"tableName", | ||
], | ||
}, | ||
dimensionContentId: { | ||
type: "string", | ||
label: "Dimension Content ID", | ||
description: "The unique identifier of the record to delete.", | ||
}, | ||
}, | ||
methods: { | ||
deleteData({ | ||
tableName, dimensionContentId, ...args | ||
} = {}) { | ||
return this.app.delete({ | ||
tableName, | ||
path: `/${dimensionContentId}`, | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
deleteData, | ||
tableName, | ||
dimensionContentId, | ||
} = this; | ||
|
||
const response = await deleteData({ | ||
tableName, | ||
dimensionContentId, | ||
}); | ||
|
||
$.export("$summary", "Succesfully deleted record from the Mitra database."); | ||
return response; | ||
}, | ||
}; | ||
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,47 @@ | ||||||
import mitra from "../../mitra.app.mjs"; | ||||||
|
||||||
export default { | ||||||
key: "mitra-get-data", | ||||||
name: "Get Data", | ||||||
description: "Fetches data from the specified table, allowing dynamic filters via query parameters. [See the documentation](https://mitralab.io/docs/api)", | ||||||
version: "0.0.1", | ||||||
type: "action", | ||||||
props: { | ||||||
mitra, | ||||||
tableName: { | ||||||
propDefinition: [ | ||||||
mitra, | ||||||
"tableName", | ||||||
], | ||||||
}, | ||||||
params: { | ||||||
type: "object", | ||||||
label: "Query Parameters", | ||||||
description: "Dynamic filters for querying records (e.g., `status`, `hours_gt`).", | ||||||
}, | ||||||
}, | ||||||
methods: { | ||||||
fetchData({ | ||||||
tableName, ...args | ||||||
} = {}) { | ||||||
return this.app._makeRequest({ | ||||||
tableName, | ||||||
...args, | ||||||
}); | ||||||
}, | ||||||
}, | ||||||
async run({ $ }) { | ||||||
const { | ||||||
fetchData, | ||||||
tableName, | ||||||
params, | ||||||
} = this; | ||||||
|
||||||
const response = await fetchData({ | ||||||
tableName, | ||||||
params, | ||||||
}); | ||||||
$.export("$summary", "Succesfully fetched data from the database."); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct the typo in the summary message. There is a typo in the summary message on line 44. The word "Succesfully" should be spelled "Successfully". Apply this diff to fix the typo: - $.export("$summary", "Succesfully fetched data from the database.");
+ $.export("$summary", "Successfully fetched data from the database."); 📝 Committable suggestion
Suggested change
|
||||||
return response; | ||||||
Comment on lines
+40
to
+45
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add error handling for the data fetching process. Currently, the code does not handle potential errors from the Example: async run({ $ }) {
const {
fetchData,
tableName,
params,
} = this;
try {
const response = await fetchData({
tableName,
params,
});
$.export("$summary", "Successfully fetched data from the database.");
return response;
} catch (error) {
$.export("$summary", `Failed to fetch data: ${error.message}`);
throw error;
}
} |
||||||
}, | ||||||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import utils from "../../common/utils.mjs"; | ||
import app from "../../mitra.app.mjs"; | ||
|
||
export default { | ||
key: "mitra-insert-data", | ||
name: "Insert Data", | ||
description: "Inserts one or more records into a table in the Mitra database.", | ||
version: "0.0.7", | ||
type: "action", | ||
props: { | ||
app, | ||
tableName: { | ||
propDefinition: [ | ||
app, | ||
"tableName", | ||
], | ||
}, | ||
records: { | ||
propDefinition: [ | ||
app, | ||
"records", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
insertData({ | ||
tableName, ...args | ||
} = {}) { | ||
return this.app.post({ | ||
tableName, | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
insertData, | ||
tableName, | ||
records, | ||
} = this; | ||
|
||
const response = await insertData({ | ||
$, | ||
tableName, | ||
data: utils.parseArray(records), | ||
}); | ||
|
||
$.export("$summary", "Successfully inserted records into the Mitra database."); | ||
return response; | ||
}, | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import app from "../../mitra.app.mjs"; | ||
import utils from "../../common/utils.mjs"; | ||
|
||
export default { | ||
key: "mitra-update-data", | ||
name: "Update Data", | ||
description: "Updates one or more records in a table.", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
tableName: { | ||
propDefinition: [ | ||
app, | ||
"tableName", | ||
], | ||
}, | ||
records: { | ||
propDefinition: [ | ||
app, | ||
"records", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
updateData({ | ||
tableName, ...args | ||
} = {}) { | ||
return this.app.put({ | ||
tableName, | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
updateData, | ||
tableName, | ||
records, | ||
} = this; | ||
|
||
const response = await updateData({ | ||
$, | ||
tableName, | ||
data: utils.parseArray(records), | ||
}); | ||
|
||
$.export("$summary", "Successfully updated records into the Mitra database."); | ||
return response; | ||
}, | ||
}; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,50 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { ConfigurationError } from "@pipedream/platform"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function isJson(value) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
JSON.parse(value); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} catch (e) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return false; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return true; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+3
to
+11
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure correct handling of non-string inputs in The Apply this diff to fix the issue: function isJson(value) {
+ if (typeof value !== "string") {
+ return false;
+ }
try {
JSON.parse(value);
} catch (e) {
return false;
}
return true;
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function valueToObject(value) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (typeof(value) === "object") { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return value; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!isJson(value)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
throw new ConfigurationError(`Make sure the custom expression contains a valid JSON object: \`${value}\``); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return JSON.parse(value); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+13
to
+23
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Handle In the Apply this diff to address the issue: function valueToObject(value) {
- if (typeof(value) === "object") {
+ if (typeof value === "object" && value !== null) {
return value;
}
if (!isJson(value)) {
throw new ConfigurationError(`Make sure the custom expression contains a valid JSON object: \`${value}\``);
}
return JSON.parse(value);
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function parseArray(value) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!value) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return []; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (Array.isArray(value)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return value; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const parsedValue = JSON.parse(value); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!Array.isArray(parsedValue)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
throw new Error("Not an array"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return parsedValue; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+35
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Optimize parsing logic in Currently, the code attempts to parse the value with Apply this diff to optimize the parsing logic: if (Array.isArray(value)) {
return value;
}
+ if (typeof value !== "string") {
+ throw new Error("Provided value is not a string or an array");
+ }
+
const parsedValue = JSON.parse(value);
if (!Array.isArray(parsedValue)) {
throw new Error("Not an array");
}
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} catch (e) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
throw new ConfigurationError("Make sure the custom expression contains a valid array object"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+25
to
+46
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Include original error message in When catching exceptions in the Apply this diff to improve error messages: } catch (e) {
- throw new ConfigurationError("Make sure the custom expression contains a valid array object");
+ throw new ConfigurationError(`Make sure the custom expression contains a valid array object. Error: ${e.message}`);
}
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export default { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
parseArray: (value) => parseArray(value).map(valueToObject), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,11 +1,66 @@ | ||||||||||||||||||||||
import { axios } from "@pipedream/platform"; | ||||||||||||||||||||||
|
||||||||||||||||||||||
export default { | ||||||||||||||||||||||
type: "app", | ||||||||||||||||||||||
app: "mitra", | ||||||||||||||||||||||
propDefinitions: {}, | ||||||||||||||||||||||
propDefinitions: { | ||||||||||||||||||||||
tableName: { | ||||||||||||||||||||||
type: "string", | ||||||||||||||||||||||
label: "Table Name", | ||||||||||||||||||||||
description: "The name of the table in the database in case it was not set in the app.", | ||||||||||||||||||||||
optional: true, | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
records: { | ||||||||||||||||||||||
type: "string[]", | ||||||||||||||||||||||
label: "Records", | ||||||||||||||||||||||
description: "An array of records to insert or update, in JSON format.", | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
Comment on lines
+14
to
+17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider changing The Apply this diff to update the type: records: {
- type: "string[]",
+ type: "object[]",
label: "Records",
description: "An array of records to insert or update, in JSON format.",
}, 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
}, | ||||||||||||||||||||||
methods: { | ||||||||||||||||||||||
// this.$auth contains connected account data | ||||||||||||||||||||||
authKeys() { | ||||||||||||||||||||||
console.log(Object.keys(this.$auth)); | ||||||||||||||||||||||
getUrl(tableName, path) { | ||||||||||||||||||||||
const { | ||||||||||||||||||||||
url, | ||||||||||||||||||||||
table_name: defaultTableName, | ||||||||||||||||||||||
} = this.$auth; | ||||||||||||||||||||||
const baseUrl = `${url}/${tableName || defaultTableName}`; | ||||||||||||||||||||||
return path | ||||||||||||||||||||||
? `${baseUrl}${path}` | ||||||||||||||||||||||
: baseUrl; | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
getHeaders(headers) { | ||||||||||||||||||||||
return { | ||||||||||||||||||||||
...headers, | ||||||||||||||||||||||
"Content-Type": "application/json", | ||||||||||||||||||||||
"Authorization": `Bearer ${this.$auth.api_key}`, | ||||||||||||||||||||||
}; | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
_makeRequest({ | ||||||||||||||||||||||
$ = this, path, headers, tableName, ...args | ||||||||||||||||||||||
} = {}) { | ||||||||||||||||||||||
return axios($, { | ||||||||||||||||||||||
...args, | ||||||||||||||||||||||
debug: true, | ||||||||||||||||||||||
url: this.getUrl(tableName, path), | ||||||||||||||||||||||
headers: this.getHeaders(headers), | ||||||||||||||||||||||
}); | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
post(args = {}) { | ||||||||||||||||||||||
return this._makeRequest({ | ||||||||||||||||||||||
method: "POST", | ||||||||||||||||||||||
...args, | ||||||||||||||||||||||
}); | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
put(args = {}) { | ||||||||||||||||||||||
return this._makeRequest({ | ||||||||||||||||||||||
method: "PUT", | ||||||||||||||||||||||
...args, | ||||||||||||||||||||||
}); | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
delete(args = {}) { | ||||||||||||||||||||||
return this._makeRequest({ | ||||||||||||||||||||||
methot: "DELETE", | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix typo in There is a typo in the Apply this diff to fix the typo: return this._makeRequest({
- methot: "DELETE",
+ method: "DELETE",
...args,
}); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
...args, | ||||||||||||||||||||||
}); | ||||||||||||||||||||||
Comment on lines
+59
to
+63
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider renaming the While naming a method Apply this diff to rename the method: - delete(args = {}) {
+ deleteRecord(args = {}) {
return this._makeRequest({
method: "DELETE",
...args,
});
}, Remember to update all references to this method accordingly. 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
}, | ||||||||||||||||||||||
}, | ||||||||||||||||||||||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo and consider adding error handling.
There's a typo in the success message. Change "Succesfully" to "Successfully" on line 46.
Consider adding error handling to the
run
method. This will make the action more robust and provide better feedback in case of failures.Here's a suggested implementation with error handling: