diff --git a/packages/server/modules/auth/domain/operations.ts b/packages/server/modules/auth/domain/operations.ts index 6cd4551f1..3bcaf4ed8 100644 --- a/packages/server/modules/auth/domain/operations.ts +++ b/packages/server/modules/auth/domain/operations.ts @@ -1,11 +1,19 @@ import { DefaultAppWithUnwrappedScopes } from '@/modules/auth/defaultApps' -import { FullServerApp, ServerAppListItem } from '@/modules/auth/domain/types' +import { + FullServerApp, + ServerAppListItem, + UserServerApp +} from '@/modules/auth/domain/types' import { ScopeRecord } from '@/modules/auth/helpers/types' export type GetApp = (params: { id: string }) => Promise export type GetAllPublicApps = () => Promise +export type GetAllAppsCreatedByUser = (params: { + userId: string +}) => Promise + export type GetAllScopes = () => Promise export type RegisterDefaultApp = (app: DefaultAppWithUnwrappedScopes) => Promise diff --git a/packages/server/modules/auth/domain/types.ts b/packages/server/modules/auth/domain/types.ts index f4017cc6e..0d6adccab 100644 --- a/packages/server/modules/auth/domain/types.ts +++ b/packages/server/modules/auth/domain/types.ts @@ -1,11 +1,14 @@ import { ScopeRecord } from '@/modules/auth/helpers/types' import { ServerAppRecord, UserRecord } from '@/modules/core/helpers/types' -export type FullServerApp = ServerAppRecord & { - scopes: ScopeRecord[] +export type UserServerApp = ServerAppRecord & { author: Pick | null } +export type FullServerApp = UserServerApp & { + scopes: ScopeRecord[] +} + export type ServerAppListItem = Pick< FullServerApp, | 'id' diff --git a/packages/server/modules/auth/graph/resolvers/apps.js b/packages/server/modules/auth/graph/resolvers/apps.js index a34a7ee98..346bb486e 100644 --- a/packages/server/modules/auth/graph/resolvers/apps.js +++ b/packages/server/modules/auth/graph/resolvers/apps.js @@ -1,6 +1,5 @@ const { ForbiddenError } = require('@/modules/shared/errors') const { - getAllAppsCreatedByUser, getAllAppsAuthorizedByUser, createApp, updateApp, @@ -10,12 +9,14 @@ const { const { Roles } = require('@speckle/shared') const { getAppFactory, - getAllPublicAppsFactory + getAllPublicAppsFactory, + getAllAppsCreatedByUserFactory } = require('@/modules/auth/repositories/apps') const { db } = require('@/db/knex') const getApp = getAppFactory({ db }) const getAllPublicApps = getAllPublicAppsFactory({ db }) +const getAllAppsCreatedByUser = getAllAppsCreatedByUserFactory({ db }) module.exports = { Query: { diff --git a/packages/server/modules/auth/repositories/apps.ts b/packages/server/modules/auth/repositories/apps.ts index 84eb056aa..060e29d7f 100644 --- a/packages/server/modules/auth/repositories/apps.ts +++ b/packages/server/modules/auth/repositories/apps.ts @@ -1,6 +1,7 @@ import { moduleLogger } from '@/logging/logging' import { getDefaultApp } from '@/modules/auth/defaultApps' import { + GetAllAppsCreatedByUser, GetAllPublicApps, GetAllScopes, GetApp, @@ -113,6 +114,27 @@ export const getAllPublicAppsFactory = })) } +export const getAllAppsCreatedByUserFactory = + (deps: { db: Knex }): GetAllAppsCreatedByUser => + async ({ userId }) => { + const apps: Array< + ServerAppRecord & Partial<{ authorName: string; authorId: string }> + > = await tables + .serverApps(deps.db) + .select('server_apps.*', 'users.name as authorName', 'users.id as authorId') + .where({ authorId: userId }) + .leftJoin('users', 'users.id', '=', 'server_apps.authorId') + + return apps.map((app) => ({ + ...app, + redirectUrl: getAppRedirectUrl(app), + author: + app.authorId && app.authorName + ? { name: app.authorName, id: app.authorId, avatar: null } + : null + })) + } + export const getAllScopesFactory = (deps: { db: Knex }): GetAllScopes => async () => { diff --git a/packages/server/modules/auth/services/apps.js b/packages/server/modules/auth/services/apps.js index 797664750..e2bfb4fe3 100644 --- a/packages/server/modules/auth/services/apps.js +++ b/packages/server/modules/auth/services/apps.js @@ -21,33 +21,6 @@ const addDefaultAppOverrides = (app) => { } module.exports = { - async getAllAppsCreatedByUser({ userId }) { - const apps = await ServerApps() - .select( - 'server_apps.id', - 'server_apps.secret', - 'server_apps.name', - 'server_apps.description', - 'server_apps.redirectUrl', - 'server_apps.logo', - 'server_apps.termsAndConditionsLink', - 'users.name as authorName', - 'users.id as authorId' - ) - .where({ authorId: userId }) - .leftJoin('users', 'users.id', '=', 'server_apps.authorId') - - apps.forEach((app) => { - if (app.authorName) { - app.author = { name: app.authorName, id: app.authorId } - } - delete app.authorName - delete app.authorId - }) - - return apps - }, - async getAllAppsAuthorizedByUser({ userId }) { const query = knex.raw( `