Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions components/educateme/actions/create-course/create-course.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import educateme from "../../educateme.app.mjs";

export default {
key: "educateme-create-course",
name: "Create Course",
description: "Create a new course. [See the documentation](https://edme.notion.site/API-integration-v0-2-ef33641eb7f24fa9a6efb969c1f2928f)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: false,
},
props: {
educateme,
title: {
type: "string",
label: "Title",
description: "The title of the course",
},
type: {
type: "string",
label: "Course Type",
description: "The type of the course",
options: [
"COHORT_BASED",
"SELF_PACED",
],
},
previewUrl: {
type: "string",
label: "Preview URL",
description: "The URL of the course preview",
optional: true,
},
withProgramSyncing: {
type: "boolean",
label: "With Program Syncing",
description: "Whether to sync the course with the program",
optional: true,
},
duplicatedCourseId: {
propDefinition: [
educateme,
"courseId",
],
label: "Duplicated Course ID",
description: "Optional. In case you need to copy a structure from another course",
optional: true,
},
},
async run({ $ }) {
const { result } = await this.educateme.createCourse({
$,
data: {
title: this.title,
type: this.type,
previewUrl: this.previewUrl,
withProgramSyncing: this.withProgramSyncing,
duplicatedCourseId: this.duplicatedCourseId,
},
});
if (result?.id) {
$.export("$summary", `Successfully created course with ID: ${result.id}`);
}
return result;
},
};
49 changes: 49 additions & 0 deletions components/educateme/actions/find-courses/find-courses.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import educateme from "../../educateme.app.mjs";

export default {
key: "educateme-find-courses",
name: "Find Courses",
description: "Find courses by optional filters. [See the documentation](https://edme.notion.site/API-integration-v0-2-ef33641eb7f24fa9a6efb969c1f2928f)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
educateme,
learnerEmail: {
type: "string",
label: "Learner Email",
description: "Filter courses by assigned learner email",
optional: true,
},
isFinished: {
type: "boolean",
label: "Is Finished",
description: "If the course is finished",
optional: true,
},
isSuspended: {
type: "boolean",
label: "Is Suspended",
description: "If the course is suspended",
optional: true,
},
},
async run({ $ }) {
const courses = await this.educateme.listCourses({
$,
params: {
learnerEmail: this.learnerEmail,
isFinished: this.isFinished,
isSuspended: this.isSuspended,
},
});
$.export("$summary", `Successfully found ${courses.length} course${courses.length === 1
? ""
: "s"}`);
return courses;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import educateme from "../../educateme.app.mjs";

export default {
key: "educateme-get-course-activities",
name: "Get Course Activities",
description: "Get the activities for a course. [See the documentation](https://edme.notion.site/API-integration-v0-2-ef33641eb7f24fa9a6efb969c1f2928f)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: true,
},
props: {
educateme,
courseId: {
propDefinition: [
educateme,
"courseId",
],
},
},
async run({ $ }) {
const { result } = await this.educateme.listCourseActivities({
$,
courseId: this.courseId,
});
$.export("$summary", "Successfully retrieved course activities");
return result;
},
};
56 changes: 51 additions & 5 deletions components/educateme/educateme.app.mjs
Original file line number Diff line number Diff line change
@@ -1,11 +1,57 @@
import { axios } from "@pipedream/platform";

export default {
type: "app",
app: "educateme",
propDefinitions: {},
propDefinitions: {
courseId: {
type: "string",
label: "Course ID",
description: "The ID of a course",
async options() {
const courses = await this.listCourses();
return courses.map((course) => ({
label: course.title,
value: course.id,
}));
},
},
},
methods: {
// this.$auth contains connected account data
authKeys() {
console.log(Object.keys(this.$auth));
_baseUrl() {
return this.$auth.api_url;
},
_makeRequest({
$ = this, path, ...opts
}) {
return axios($, {
...opts,
url: `${this._baseUrl()}${path}`,
headers: {
"api-key": `${this.$auth.api_key}`,
},
});
},
listCourses(opts = {}) {
return this._makeRequest({
path: "/courses",
...opts,
});
},
listCourseActivities({
courseId, ...opts
}) {
return this._makeRequest({
path: `/courses/${courseId}/lessons`,
...opts,
});
},
createCourse(opts = {}) {
return this._makeRequest({
method: "POST",
path: "/courses",
...opts,
});
},
},
};
};
5 changes: 4 additions & 1 deletion components/educateme/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pipedream/educateme",
"version": "0.0.1",
"version": "0.1.0",
"description": "Pipedream EducateMe Components",
"main": "educateme.app.mjs",
"keywords": [
Expand All @@ -11,5 +11,8 @@
"author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@pipedream/platform": "^3.1.1"
}
}
31 changes: 31 additions & 0 deletions components/educateme/sources/common/base.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import educateme from "../../educateme.app.mjs";
import {
DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, ConfigurationError,
} from "@pipedream/platform";

export default {
props: {
educateme,
timer: {
type: "$.interface.timer",
default: {
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
},
},
},
methods: {
async getResources() {
throw new ConfigurationError("getResources method must be implemented");
},
generateMeta() {
throw new ConfigurationError("generateMeta method must be implemented");
},
},
async run() {
const resources = await this.getResources();
for (const resource of resources || []) {
const meta = this.generateMeta(resource);
this.$emit(resource, meta);
}
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import common from "../common/base.mjs";

export default {
...common,
key: "educateme-new-course-activity",
name: "New Course Activity",
description: "Emit new event when a new activity is created in a course. [See the documentation](https://edme.notion.site/API-integration-v0-2-ef33641eb7f24fa9a6efb969c1f2928f)",
version: "0.0.1",
type: "source",
dedupe: "unique",
props: {
...common.props,
courseId: {
propDefinition: [
common.props.educateme,
"courseId",
],
},
},
methods: {
...common.methods,
async getResources() {
const { result } = await this.educateme.listCourseActivities({
courseId: this.courseId,
});
return result;
},
generateMeta(activity) {
return {
id: activity.id,
summary: `New activity: ${activity.title}`,
ts: Date.now(),
};
},
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import common from "../common/base.mjs";

export default {
...common,
key: "educateme-new-course-created",
name: "New Course Created",
description: "Emit new event when a new course is created. [See the documentation](https://edme.notion.site/API-integration-v0-2-ef33641eb7f24fa9a6efb969c1f2928f)",
version: "0.0.1",
type: "source",
dedupe: "unique",
methods: {
...common.methods,
getResources() {
return this.educateme.listCourses();
},
generateMeta(course) {
return {
id: course.id,
summary: `New course: ${course.title}`,
ts: Date.now(),
};
},
},
};
12 changes: 8 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading