diff --git a/package.json b/package.json index aebf71b9..124ecb6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hawk.api", - "version": "1.2.15", + "version": "1.2.16", "main": "index.ts", "license": "BUSL-1.1", "scripts": { diff --git a/src/resolvers/event.js b/src/resolvers/event.js index 5b8804da..af419e95 100644 --- a/src/resolvers/event.js +++ b/src/resolvers/event.js @@ -41,13 +41,18 @@ module.exports = { * @param factories - factories for working with models * @return {Promise | null} */ - async visitedBy({ visitedBy, projectId }, _args, { factories, user }) { + async visitedBy({ visitedBy, projectId, workspaceId }, _args, { factories, user }) { /** * Crutch for Demo Workspace + * Prefer workspaceId from parent if present to avoid extra project lookup */ - const project = await factories.projectsFactory.findById(projectId); + const resolvedWorkspaceId = workspaceId || (await (async () => { + const project = await factories.projectsFactory.findById(projectId); + + return project ? project.workspaceId.toString() : undefined; + })()); - if (project.workspaceId.toString() === '6213b6a01e6281087467cc7a') { + if (resolvedWorkspaceId === '6213b6a01e6281087467cc7a') { return [ await factories.usersFactory.findById(user.id) ]; } diff --git a/src/resolvers/project.js b/src/resolvers/project.js index 5cf0bb68..62188b83 100644 --- a/src/resolvers/project.js +++ b/src/resolvers/project.js @@ -460,6 +460,20 @@ module.exports = { const dailyEventsPortion = await factory.findDailyEventsPortion(limit, nextCursor, sort, filters, search); + /** + * Pass workspaceId down to events so nested resolvers (like Event.visitedBy) + * can avoid extra project lookups. + */ + if (dailyEventsPortion && Array.isArray(dailyEventsPortion.dailyEvents)) { + dailyEventsPortion.dailyEvents = dailyEventsPortion.dailyEvents.map((item) => ({ + ...item, + event: { + ...item.event, + workspaceId: project.workspaceId && project.workspaceId.toString ? project.workspaceId.toString() : project.workspaceId, + }, + })); + } + return dailyEventsPortion; },