From 0e684570f849579eb393a99048c3c5b0aca2f991 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 8 Oct 2021 21:24:27 +0200 Subject: [PATCH] feat: Implement getAll and getAllByName graphQL queries --- packages/backend/src/apps/twitch/info.json | 40 +++++++++++++++++++ packages/backend/src/apps/twitter/info.json | 40 +++++++++++++++++++ .../backend/src/graphql/graphql-schema.ts | 3 +- .../src/graphql/queries/get-apps-by-name.ts | 11 +++++ .../backend/src/graphql/queries/get-apps.ts | 7 ++++ packages/backend/src/graphql/root-resolver.ts | 8 ++-- packages/backend/src/models/app.ts | 16 ++++++++ 7 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 packages/backend/src/apps/twitch/info.json create mode 100644 packages/backend/src/apps/twitter/info.json create mode 100644 packages/backend/src/graphql/queries/get-apps-by-name.ts create mode 100644 packages/backend/src/graphql/queries/get-apps.ts create mode 100644 packages/backend/src/models/app.ts diff --git a/packages/backend/src/apps/twitch/info.json b/packages/backend/src/apps/twitch/info.json new file mode 100644 index 00000000..522e268b --- /dev/null +++ b/packages/backend/src/apps/twitch/info.json @@ -0,0 +1,40 @@ +{ + "name": "Twitch", + "iconUrl": "https://automatisch.io/apps/twitch.png", + "docUrl": "https://automatisch.io/docs/twitch", + "fields": [ + { + "key": "oAuthRedirectUrl", + "label": "OAuth Redirect URL", + "type": "string", + "required": true, + "readOnly": true, + "placeholder": "http://localhost:3000/sample", + "description": "When asked to input an OAuth callback or redirect URL in Twitch OAuth, enter the URL above.", + "docUrl": "https://automatisch.io/docs/twitch#oauth-redirect-url", + "clickToCopy": true + }, + { + "key": "consumerKey", + "label": "Consumer Key", + "type": "string", + "required": true, + "readOnly": false, + "placeholder": null, + "description": null, + "docUrl": "https://automatisch.io/docs/twitch#consumer-key", + "clickToCopy": false + }, + { + "key": "consumerSecret", + "label": "Consumer Secret", + "type": "string", + "required": true, + "readOnly": false, + "placeholder": null, + "description": null, + "docUrl": "https://automatisch.io/docs/twitch#consumer-secret", + "clickToCopy": false + } + ] +} diff --git a/packages/backend/src/apps/twitter/info.json b/packages/backend/src/apps/twitter/info.json new file mode 100644 index 00000000..0344eb53 --- /dev/null +++ b/packages/backend/src/apps/twitter/info.json @@ -0,0 +1,40 @@ +{ + "name": "Twitter", + "iconUrl": "https://automatisch.io/apps/twitter.png", + "docUrl": "https://automatisch.io/docs/twitter", + "fields": [ + { + "key": "oAuthRedirectUrl", + "label": "OAuth Redirect URL", + "type": "string", + "required": true, + "readOnly": true, + "placeholder": "http://localhost:3000/sample", + "description": "When asked to input an OAuth callback or redirect URL in Twitter OAuth, enter the URL above.", + "docUrl": "https://automatisch.io/docs/twitter#oauth-redirect-url", + "clickToCopy": true + }, + { + "key": "consumerKey", + "label": "Consumer Key", + "type": "string", + "required": true, + "readOnly": false, + "placeholder": null, + "description": null, + "docUrl": "https://automatisch.io/docs/twitter#consumer-key", + "clickToCopy": false + }, + { + "key": "consumerSecret", + "label": "Consumer Secret", + "type": "string", + "required": true, + "readOnly": false, + "placeholder": null, + "description": null, + "docUrl": "https://automatisch.io/docs/twitter#consumer-secret", + "clickToCopy": false + } + ] +} diff --git a/packages/backend/src/graphql/graphql-schema.ts b/packages/backend/src/graphql/graphql-schema.ts index df5cbc68..a169235c 100644 --- a/packages/backend/src/graphql/graphql-schema.ts +++ b/packages/backend/src/graphql/graphql-schema.ts @@ -2,7 +2,8 @@ import { buildSchema } from 'graphql'; const graphQLSchema = buildSchema(` type Query { - hello: String + getApps: [String!] + getAppsByName(name: String!): [String!] } `); diff --git a/packages/backend/src/graphql/queries/get-apps-by-name.ts b/packages/backend/src/graphql/queries/get-apps-by-name.ts new file mode 100644 index 00000000..17f00fef --- /dev/null +++ b/packages/backend/src/graphql/queries/get-apps-by-name.ts @@ -0,0 +1,11 @@ +import App from '../../models/app'; + +type Params = { + name: string +} + +const getAppsByName = (params: Params) => { + return App.findAllByName(params.name) +} + +export default getAppsByName; diff --git a/packages/backend/src/graphql/queries/get-apps.ts b/packages/backend/src/graphql/queries/get-apps.ts new file mode 100644 index 00000000..7546b4b8 --- /dev/null +++ b/packages/backend/src/graphql/queries/get-apps.ts @@ -0,0 +1,7 @@ +import App from '../../models/app'; + +const getApps = () => { + return App.findAll() +} + +export default getApps; diff --git a/packages/backend/src/graphql/root-resolver.ts b/packages/backend/src/graphql/root-resolver.ts index 065bd91d..8eae43db 100644 --- a/packages/backend/src/graphql/root-resolver.ts +++ b/packages/backend/src/graphql/root-resolver.ts @@ -1,7 +1,9 @@ +import getApps from './queries/get-apps'; +import getAppsByName from './queries/get-apps-by-name'; + const rootResolver = { - hello: () => { - return 'Hello world!'; - }, + getApps: getApps, + getAppsByName: getAppsByName }; export default rootResolver; diff --git a/packages/backend/src/models/app.ts b/packages/backend/src/models/app.ts new file mode 100644 index 00000000..0d248f5e --- /dev/null +++ b/packages/backend/src/models/app.ts @@ -0,0 +1,16 @@ +import fs from 'fs'; + +class App { + static folderPath = __dirname + '/../apps' + static list = fs.readdirSync(this.folderPath); + + static findAll(): string[] { + return this.list; + } + + static findAllByName(name: string): string[] { + return this.list.filter((app) => app.includes(name.toLowerCase())); + } +} + +export default App;