From a7582a4503b95b27ee86d63a5cd8e25389c0ff30 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 20 Oct 2021 13:56:41 +0200 Subject: [PATCH] chore: Introduce app info converter and use JSON for info files --- .../src/apps/flickr/{info.ts => info.json} | 9 ++---- .../src/apps/twitch/{info.ts => info.json} | 9 ++---- .../src/apps/twitter/{info.ts => info.json} | 9 ++---- .../graphql/mutations/create-connection.ts | 2 +- .../graphql/queries/get-app-connections.ts | 2 +- .../backend/src/graphql/queries/get-app.ts | 2 +- .../src/graphql/queries/get-connected-apps.ts | 2 +- .../backend/src/helpers/app-info-converter.ts | 11 +++++++ packages/backend/src/models/app.ts | 29 ++++++++----------- 9 files changed, 33 insertions(+), 42 deletions(-) rename packages/backend/src/apps/flickr/{info.ts => info.json} (92%) rename packages/backend/src/apps/twitch/{info.ts => info.json} (84%) rename packages/backend/src/apps/twitter/{info.ts => info.json} (92%) create mode 100644 packages/backend/src/helpers/app-info-converter.ts diff --git a/packages/backend/src/apps/flickr/info.ts b/packages/backend/src/apps/flickr/info.json similarity index 92% rename from packages/backend/src/apps/flickr/info.ts rename to packages/backend/src/apps/flickr/info.json index cead0766..b4713de2 100644 --- a/packages/backend/src/apps/flickr/info.ts +++ b/packages/backend/src/apps/flickr/info.json @@ -1,10 +1,7 @@ -import appInfoType from '../../types/app-info'; -import appConfig from '../../config/app'; - -const appInfo: appInfoType = { +{ "name": "Flickr", "key": "flickr", - "iconUrl": `${appConfig.baseUrl}/apps/flickr/assets/favicon.svg`, + "iconUrl": "{BASE_URL}/apps/flickr/assets/favicon.svg", "docUrl": "https://automatisch.io/docs/flickr", "primaryColor": "000000", "fields": [ @@ -116,5 +113,3 @@ const appInfo: appInfoType = { } ] } - -export default appInfo; diff --git a/packages/backend/src/apps/twitch/info.ts b/packages/backend/src/apps/twitch/info.json similarity index 84% rename from packages/backend/src/apps/twitch/info.ts rename to packages/backend/src/apps/twitch/info.json index b6e57b81..a87f6db5 100644 --- a/packages/backend/src/apps/twitch/info.ts +++ b/packages/backend/src/apps/twitch/info.json @@ -1,10 +1,7 @@ -import appInfoType from '../../types/app-info'; -import appConfig from '../../config/app'; - -const appInfo: appInfoType = { +{ "name": "Twitch", "key": "twitch", - "iconUrl": `${appConfig.baseUrl}/apps/twitch/assets/favicon.svg`, + "iconUrl": "{BASE_URL}/apps/twitch/assets/favicon.svg", "docUrl": "https://automatisch.io/docs/twitch", "primaryColor": "6441a5", "fields": [ @@ -46,5 +43,3 @@ const appInfo: appInfoType = { } ] } - -export default appInfo; diff --git a/packages/backend/src/apps/twitter/info.ts b/packages/backend/src/apps/twitter/info.json similarity index 92% rename from packages/backend/src/apps/twitter/info.ts rename to packages/backend/src/apps/twitter/info.json index 6ac965f3..799efc4a 100644 --- a/packages/backend/src/apps/twitter/info.ts +++ b/packages/backend/src/apps/twitter/info.json @@ -1,10 +1,7 @@ -import appInfoType from '../../types/app-info'; -import appConfig from '../../config/app'; - -const appInfo: appInfoType = { +{ "name": "Twitter", "key": "twitter", - "iconUrl": `${appConfig.baseUrl}/apps/twitter/assets/favicon.svg`, + "iconUrl": "{BASE_URL}/apps/twitter/assets/favicon.svg", "docUrl": "https://automatisch.io/docs/twitter", "primaryColor": "2DAAE1", "fields": [ @@ -116,5 +113,3 @@ const appInfo: appInfoType = { } ] } - -export default appInfo; diff --git a/packages/backend/src/graphql/mutations/create-connection.ts b/packages/backend/src/graphql/mutations/create-connection.ts index e659de80..c0e7ca0e 100644 --- a/packages/backend/src/graphql/mutations/create-connection.ts +++ b/packages/backend/src/graphql/mutations/create-connection.ts @@ -10,7 +10,7 @@ type Params = { data: object } const createConnectionResolver = async (params: Params, req: RequestWithCurrentUser) => { - const app = await App.findOneByKey(params.key); + const app = App.findOneByKey(params.key); const connection = await Connection.query().insert({ key: params.key, data: params.data, diff --git a/packages/backend/src/graphql/queries/get-app-connections.ts b/packages/backend/src/graphql/queries/get-app-connections.ts index 08d8bbc5..95e87354 100644 --- a/packages/backend/src/graphql/queries/get-app-connections.ts +++ b/packages/backend/src/graphql/queries/get-app-connections.ts @@ -9,7 +9,7 @@ type Params = { } const getAppConnectionsResolver = async (params: Params, req: RequestWithCurrentUser) => { - const app = await App.findOneByKey(params.key); + const app = App.findOneByKey(params.key); const connections = await Connection.query() .where({ user_id: req.currentUser.id, key: params.key }) diff --git a/packages/backend/src/graphql/queries/get-app.ts b/packages/backend/src/graphql/queries/get-app.ts index 44701c1b..cb358248 100644 --- a/packages/backend/src/graphql/queries/get-app.ts +++ b/packages/backend/src/graphql/queries/get-app.ts @@ -14,7 +14,7 @@ const getAppResolver = async (params: Params, req: RequestWithCurrentUser) => { throw new Error('No key provided.') } - const app = await App.findOneByKey(params.key); + const app = App.findOneByKey(params.key); if (req.currentUser?.id) { const connections = await Connection.query() diff --git a/packages/backend/src/graphql/queries/get-connected-apps.ts b/packages/backend/src/graphql/queries/get-connected-apps.ts index 1d6c511b..e0036ce1 100644 --- a/packages/backend/src/graphql/queries/get-connected-apps.ts +++ b/packages/backend/src/graphql/queries/get-connected-apps.ts @@ -9,7 +9,7 @@ type Params = { } const getConnectedAppsResolver = async (params: Params, req: RequestWithCurrentUser) => { - let apps = await App.findAll(params.name) + let apps = App.findAll(params.name) const connections = await Connection.query() .select('connections.key') diff --git a/packages/backend/src/helpers/app-info-converter.ts b/packages/backend/src/helpers/app-info-converter.ts new file mode 100644 index 00000000..052f7ef5 --- /dev/null +++ b/packages/backend/src/helpers/app-info-converter.ts @@ -0,0 +1,11 @@ +import AppInfoType from '../types/app-info'; +import appConfig from '../config/app'; + +const appInfoConverter = (rawAppData: string) => { + const computedRawData = rawAppData.replace('{BASE_URL}', appConfig.baseUrl); + const computedJSONData: AppInfoType = JSON.parse(computedRawData) + + return computedJSONData; +} + +export default appInfoConverter; diff --git a/packages/backend/src/models/app.ts b/packages/backend/src/models/app.ts index 267e840c..b5691973 100644 --- a/packages/backend/src/models/app.ts +++ b/packages/backend/src/models/app.ts @@ -1,31 +1,26 @@ import fs from 'fs'; +import appInfoConverter from '../helpers/app-info-converter'; class App { static folderPath = __dirname + '/../apps'; static list = fs.readdirSync(this.folderPath); - static async findAll(name?: string): Promise { - let appList; + static findAll(name?: string): object[] { + if(!name) return this.list.map((name) => this.findOneByName(name)); - if(!name) { - appList = this.list.map(async (name) => await this.findOneByName(name)); - } else { - appList = this.list - .filter((app) => app.includes(name.toLowerCase())) - .map(async (name) => await this.findOneByName(name)); - } - - return Promise.all(appList) + return this.list + .filter((app) => app.includes(name.toLowerCase())) + .map((name) => this.findOneByName(name)); } - static async findOneByName(name: string): Promise { - const rawAppData = (await import(`../apps/${name}/info`)).default; - return rawAppData; + static findOneByName(name: string): object { + const rawAppData = fs.readFileSync(this.folderPath + `/${name}/info.json`, 'utf-8'); + return appInfoConverter(rawAppData); } - static async findOneByKey(key: string): Promise { - const rawAppData = (await import(`../apps/${key}/info`)).default; - return rawAppData; + static findOneByKey(key: string): object { + const rawAppData = fs.readFileSync(this.folderPath + `/${key}/info.json`, 'utf-8'); + return appInfoConverter(rawAppData); } }