From c052d37a6fcc81167ad846aa00993edc66af3632 Mon Sep 17 00:00:00 2001 From: Tessa Thornton Date: Thu, 27 Feb 2020 13:46:28 -0500 Subject: [PATCH] rename Comments.comment to Comments.visible and allow slack task to load any comment regardless of visibility (#2855) Co-authored-by: Wyatt Johnson --- src/core/server/graph/loaders/Comments.ts | 12 ++++++++++-- src/core/server/graph/resolvers/Comment.ts | 4 ++-- .../graph/resolvers/CommentModerationAction.ts | 2 +- src/core/server/graph/resolvers/Query.ts | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/core/server/graph/loaders/Comments.ts b/src/core/server/graph/loaders/Comments.ts index 29a75eee7..489cf5584 100644 --- a/src/core/server/graph/loaders/Comments.ts +++ b/src/core/server/graph/loaders/Comments.ts @@ -69,7 +69,7 @@ const primeCommentsFromConnection = (ctx: Context) => ( if (!ctx.disableCaching) { // For each of the nodes, prime the comment loader. connection.nodes.forEach(comment => { - ctx.loaders.Comments.comment.prime(comment.id, comment); + ctx.loaders.Comments.visible.prime(comment.id, comment); }); } @@ -115,7 +115,7 @@ const mapVisibleComments = (user?: Pick) => ( ): Array | null> => comments.map(mapVisibleComment(user)); export default (ctx: Context) => ({ - comment: new DataLoader | null>( + visible: new DataLoader | null>( (ids: string[]) => retrieveManyComments(ctx.mongo, ctx.tenant.id, ids).then( mapVisibleComments(ctx.user) @@ -126,6 +126,14 @@ export default (ctx: Context) => ({ cache: !ctx.disableCaching, } ), + comment: new DataLoader | null>( + (ids: string[]) => retrieveManyComments(ctx.mongo, ctx.tenant.id, ids), + { + // Disable caching for the DataLoader if the Context is designed to be + // long lived. + cache: !ctx.disableCaching, + } + ), forFilter: ({ first, after, diff --git a/src/core/server/graph/resolvers/Comment.ts b/src/core/server/graph/resolvers/Comment.ts index f786d0d62..d33bc16b3 100644 --- a/src/core/server/graph/resolvers/Comment.ts +++ b/src/core/server/graph/resolvers/Comment.ts @@ -40,7 +40,7 @@ export const maybeLoadOnlyID = ( // We want more than the ID! Get the comment! // TODO: (wyattjoh) if the parent and the parents (containing the parent) are requested, the parent comment is retrieved from the database twice. Investigate ways of reducing i/o. - return ctx.loaders.Comments.comment.load(id); + return ctx.loaders.Comments.visible.load(id); }; export const Comment: GQLCommentTypeResolver = { @@ -77,7 +77,7 @@ export const Comment: GQLCommentTypeResolver = { return 0; } - const children = await ctx.loaders.Comments.comment.loadMany(childIDs); + const children = await ctx.loaders.Comments.visible.loadMany(childIDs); return children.reduce( (sum: any, c: any) => (c && hasPublishedStatus(c) ? sum + 1 : sum), 0 diff --git a/src/core/server/graph/resolvers/CommentModerationAction.ts b/src/core/server/graph/resolvers/CommentModerationAction.ts index 19f162c24..92a3c3fe6 100644 --- a/src/core/server/graph/resolvers/CommentModerationAction.ts +++ b/src/core/server/graph/resolvers/CommentModerationAction.ts @@ -6,7 +6,7 @@ export const CommentModerationAction: GQLCommentModerationActionTypeResolver< actions.CommentModerationAction > = { revision: async (action, input, ctx) => { - const comment = await ctx.loaders.Comments.comment.load(action.commentID); + const comment = await ctx.loaders.Comments.visible.load(action.commentID); if (!comment) { return null; } diff --git a/src/core/server/graph/resolvers/Query.ts b/src/core/server/graph/resolvers/Query.ts index 822eb616a..1790d851b 100644 --- a/src/core/server/graph/resolvers/Query.ts +++ b/src/core/server/graph/resolvers/Query.ts @@ -14,7 +14,7 @@ export const Query: Required> = { user: (source, args, ctx) => ctx.loaders.Users.user.load(args.id), users: (source, args, ctx) => ctx.loaders.Users.connection(args), comment: (source, { id }, ctx) => - id ? ctx.loaders.Comments.comment.load(id) : null, + id ? ctx.loaders.Comments.visible.load(id) : null, comments: (source, args, ctx) => ctx.loaders.Comments.forFilter(args), settings: (source, args, ctx) => ctx.tenant, viewer: (source, args, ctx) => ctx.user,