refactor: Restructure apps with new data pushing logic

This commit is contained in:
Faruk AYDIN
2022-10-22 19:29:02 +02:00
parent bcff9f5a9e
commit a56135ca57
19 changed files with 115 additions and 136 deletions

View File

@@ -27,25 +27,25 @@ export default defineAction({
arguments: [
{
name: 'key',
value: 'listRepos'
}
]
}
value: 'listRepos',
},
],
},
},
{
label: 'Title',
key: 'title',
type: 'string',
required: true,
variables: true
variables: true,
},
{
label: 'Body',
key: 'body',
type: 'string',
required: true,
variables: true
}
variables: true,
},
],
},
{
@@ -59,7 +59,7 @@ export default defineAction({
const title = $.step.parameters.title as string;
const body = $.step.parameters.body as string;
if (!repoParameter) throw new Error('A repo must be set!')
if (!repoParameter) throw new Error('A repo must be set!');
if (!title) throw new Error('A title must be set!');
const { repoOwner, repo } = getRepoOwnerAndRepo(repoParameter);
@@ -68,13 +68,6 @@ export default defineAction({
body,
});
const issue: IActionOutput = {
data: {
raw: response.data,
},
error: response?.integrationError,
};
return issue;
$.setActionItem({ raw: response.data });
},
});

View File

@@ -9,7 +9,7 @@ export default defineTrigger({
substeps: [
{
key: 'chooseConnection',
name: 'Choose connection'
name: 'Choose connection',
},
{
key: 'chooseTrigger',
@@ -27,20 +27,20 @@ export default defineTrigger({
arguments: [
{
name: 'key',
value: 'listRepos'
}
]
}
}
]
value: 'listRepos',
},
],
},
},
],
},
{
key: 'testStep',
name: 'Test trigger'
}
name: 'Test trigger',
},
],
async run($) {
return await newPullRequests($);
await newPullRequests($);
},
});

View File

@@ -1,7 +1,4 @@
import {
IGlobalVariable,
ITriggerOutput,
} from '@automatisch/types';
import { IGlobalVariable, ITriggerOutput } from '@automatisch/types';
import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo';
import parseLinkHeader from '../../../../helpers/parse-header-link';
@@ -29,16 +26,15 @@ const fetchPullRequests = async ($: IGlobalVariable) => {
const response = await $.http.get(pathname, { params });
links = parseLinkHeader(response.headers.link);
if (response.integrationError) {
pullRequests.error = response.integrationError;
return pullRequests;
}
if (response.data.length) {
for (const pullRequest of response.data) {
const pullRequestId = pullRequest.id;
if (pullRequestId <= Number($.flow.lastInternalId) && !$.execution.testRun) return pullRequests;
if (
pullRequestId <= Number($.flow.lastInternalId) &&
!$.execution.testRun
)
return pullRequests;
const dataItem = {
raw: pullRequest,
@@ -53,7 +49,7 @@ const fetchPullRequests = async ($: IGlobalVariable) => {
} while (links.next && !$.execution.testRun);
return pullRequests;
}
};
const newPullRequests = async ($: IGlobalVariable) => {
const pullRequests = await fetchPullRequests($);

View File

@@ -44,11 +44,9 @@ export default defineTrigger({
await newStargazers($);
},
sort($) {
$.triggerOutput.data.sort((stargazerA, stargazerB) => {
return (
Number(stargazerA.meta.internalId) - Number(stargazerB.meta.internalId)
);
});
sort(stargazerA, stargazerB) {
return (
Number(stargazerA.meta.internalId) - Number(stargazerB.meta.internalId)
);
},
});

View File

@@ -10,7 +10,7 @@ export default defineTrigger({
substeps: [
{
key: 'chooseConnection',
name: 'Choose connection'
name: 'Choose connection',
},
{
key: 'chooseTrigger',
@@ -28,20 +28,24 @@ export default defineTrigger({
arguments: [
{
name: 'key',
value: 'listRepos'
}
]
}
value: 'listRepos',
},
],
},
},
]
],
},
{
key: 'testStep',
name: 'Test trigger'
}
name: 'Test trigger',
},
],
async run($) {
return await newWatchers($);
await newWatchers($);
},
sort() {
return -1;
},
});

View File

@@ -1,11 +1,8 @@
import {
IGlobalVariable,
ITriggerOutput,
} from '@automatisch/types';
import { IGlobalVariable, ITriggerOutput } from '@automatisch/types';
import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo';
import parseLinkHeader from '../../../../helpers/parse-header-link';
const fetchWatchers = async ($: IGlobalVariable) => {
const newWatchers = async ($: IGlobalVariable) => {
const repoParameter = $.step.parameters.repo as string;
if (!repoParameter) throw new Error('A repo must be set!');
@@ -15,9 +12,9 @@ const fetchWatchers = async ($: IGlobalVariable) => {
const firstPagePathname = `/repos/${repoOwner}/${repo}/subscribers`;
const requestConfig = {
params: {
per_page: 100
per_page: 100,
},
}
};
const firstPageResponse = await $.http.get(firstPagePathname, requestConfig);
const firstPageLinks = parseLinkHeader(firstPageResponse.headers.link);
@@ -25,20 +22,11 @@ const fetchWatchers = async ($: IGlobalVariable) => {
// in case there is only single page to fetch
let pathname = firstPageLinks.last?.uri || firstPagePathname;
const watchers: ITriggerOutput = {
data: [],
};
do {
const response = await $.http.get(pathname, requestConfig);
const links = parseLinkHeader(response.headers.link);
pathname = links.prev?.uri;
if (response.integrationError) {
watchers.error = response.integrationError;
return watchers;
}
if (response.data.length) {
// to iterate reverse-chronologically
response.data.reverse();
@@ -46,7 +34,8 @@ const fetchWatchers = async ($: IGlobalVariable) => {
for (const watcher of response.data) {
const watcherId = watcher.id.toString();
if ($.flow.isAlreadyProcessed(watcherId) && !$.execution.testRun) return watchers;
if ($.flow.isAlreadyProcessed(watcherId) && !$.execution.testRun)
return;
const dataItem = {
raw: watcher,
@@ -55,21 +44,10 @@ const fetchWatchers = async ($: IGlobalVariable) => {
},
};
watchers.data.push(dataItem);
$.pushTriggerItem(dataItem);
}
}
} while (pathname && !$.execution.testRun === false);
return watchers;
}
const newWatchers = async ($: IGlobalVariable) => {
const watchers = await fetchWatchers($);
// to process chronologically
watchers.data.reverse();
return watchers;
};
export default newWatchers;

View File

@@ -1,8 +1,4 @@
import {
IGlobalVariable,
IJSONObject,
ITriggerOutput,
} from '@automatisch/types';
import { IGlobalVariable, IJSONObject } from '@automatisch/types';
import { URLSearchParams } from 'url';
import { omitBy, isEmpty } from 'lodash';
@@ -16,10 +12,6 @@ const getUserFollowers = async (
) => {
let response;
const followers: ITriggerOutput = {
data: [],
};
do {
const params: IJSONObject = {
pagination_token: response?.data?.meta?.next_token,
@@ -40,18 +32,16 @@ const getUserFollowers = async (
if (response.data.meta.result_count > 0) {
for (const follower of response.data.data) {
if ($.flow.isAlreadyProcessed(follower.id as string)) {
return followers;
return;
}
followers.data.push({
$.pushTriggerItem({
raw: follower,
meta: { internalId: follower.id as string },
});
}
}
} while (response.data.meta.next_token && !$.execution.testRun);
return followers;
};
export default getUserFollowers;

View File

@@ -21,9 +21,7 @@ export default defineTrigger({
await getUserTweets($, { currentUser: true });
},
sort($) {
$.triggerOutput.data.sort((tweet, nextTweet) => {
return Number(nextTweet.meta.internalId) - Number(tweet.meta.internalId);
});
sort(tweet, nextTweet) {
return Number(nextTweet.meta.internalId) - Number(tweet.meta.internalId);
},
});

View File

@@ -19,6 +19,6 @@ export default defineTrigger({
],
async run($) {
return await myFollowers($);
await myFollowers($);
},
});

View File

@@ -34,9 +34,7 @@ export default defineTrigger({
await searchTweets($);
},
sort($) {
$.triggerOutput.data.sort((tweet, nextTweet) => {
return Number(nextTweet.meta.internalId) - Number(tweet.meta.internalId);
});
sort(tweet, nextTweet) {
return Number(nextTweet.meta.internalId) - Number(tweet.meta.internalId);
},
});

View File

@@ -33,9 +33,7 @@ export default defineTrigger({
await getUserTweets($, { currentUser: false });
},
sort($) {
$.triggerOutput.data.sort((tweet, nextTweet) => {
return Number(nextTweet.meta.internalId) - Number(tweet.meta.internalId);
});
sort(tweet, nextTweet) {
return Number(nextTweet.meta.internalId) - Number(tweet.meta.internalId);
},
});