From ced45a914ce77563d35e83718ecd2f134dbcbccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Curcio?= Date: Fri, 14 Sep 2018 12:05:19 -0300 Subject: [PATCH] Comment History Working --- .../server/graph/tenant/loaders/comments.ts | 15 ++++++++++++ src/core/server/graph/tenant/loaders/users.ts | 2 ++ .../server/graph/tenant/resolvers/index.ts | 2 ++ .../server/graph/tenant/resolvers/query.ts | 2 +- .../server/graph/tenant/resolvers/user.ts | 9 +++++++ src/core/server/models/comment.ts | 24 +++++++++++++++++++ 6 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/core/server/graph/tenant/resolvers/user.ts diff --git a/src/core/server/graph/tenant/loaders/comments.ts b/src/core/server/graph/tenant/loaders/comments.ts index 111a40cd4..a77e50894 100644 --- a/src/core/server/graph/tenant/loaders/comments.ts +++ b/src/core/server/graph/tenant/loaders/comments.ts @@ -9,6 +9,7 @@ import { import { retrieveCommentAssetConnection, retrieveCommentRepliesConnection, + retrieveCommentUserConnection, retrieveManyComments, } from "talk-server/models/comment"; @@ -16,6 +17,20 @@ export default (ctx: Context) => ({ comment: new DataLoader((ids: string[]) => retrieveManyComments(ctx.mongo, ctx.tenant.id, ids) ), + forUser: ( + userID: string, + // Apply the graph schema defaults at the loader. + { + first = 10, + orderBy = GQLCOMMENT_SORT.CREATED_AT_DESC, + after, + }: AssetToCommentsArgs + ) => + retrieveCommentUserConnection(ctx.mongo, ctx.tenant.id, userID, { + first, + orderBy, + after, + }), forAsset: ( assetID: string, // Apply the graph schema defaults at the loader. diff --git a/src/core/server/graph/tenant/loaders/users.ts b/src/core/server/graph/tenant/loaders/users.ts index c684a9d23..558981daa 100644 --- a/src/core/server/graph/tenant/loaders/users.ts +++ b/src/core/server/graph/tenant/loaders/users.ts @@ -1,8 +1,10 @@ import DataLoader from "dataloader"; import Context from "talk-server/graph/tenant/context"; +// import { retrieveCommentUserConnection } from "talk-server/models/comment"; import { retrieveManyUsers, User } from "talk-server/models/user"; export default (ctx: Context) => ({ + me: ctx.user, user: new DataLoader(ids => retrieveManyUsers(ctx.mongo, ctx.tenant.id, ids) ), diff --git a/src/core/server/graph/tenant/resolvers/index.ts b/src/core/server/graph/tenant/resolvers/index.ts index f8754d04b..98016785d 100644 --- a/src/core/server/graph/tenant/resolvers/index.ts +++ b/src/core/server/graph/tenant/resolvers/index.ts @@ -7,6 +7,7 @@ import Comment from "./comment"; import Mutation from "./mutation"; import Profile from "./profile"; import Query from "./query"; +import User from "./user"; const Resolvers: GQLResolver = { Asset, @@ -16,6 +17,7 @@ const Resolvers: GQLResolver = { Mutation, Profile, Query, + User, }; export default Resolvers; diff --git a/src/core/server/graph/tenant/resolvers/query.ts b/src/core/server/graph/tenant/resolvers/query.ts index 295b6c459..74362011f 100644 --- a/src/core/server/graph/tenant/resolvers/query.ts +++ b/src/core/server/graph/tenant/resolvers/query.ts @@ -5,7 +5,7 @@ const Query: GQLQueryTypeResolver = { comment: (source, { id }, ctx) => id ? ctx.loaders.Comments.comment.load(id) : null, settings: (source, args, ctx) => ctx.tenant, - me: (source, args, ctx) => ctx.user, + me: (source, args, ctx) => ctx.loaders.Users.me, }; export default Query; diff --git a/src/core/server/graph/tenant/resolvers/user.ts b/src/core/server/graph/tenant/resolvers/user.ts new file mode 100644 index 000000000..86bbbb90d --- /dev/null +++ b/src/core/server/graph/tenant/resolvers/user.ts @@ -0,0 +1,9 @@ +import { GQLUserTypeResolver } from "talk-server/graph/tenant/schema/__generated__/types"; +import { User } from "talk-server/models/User"; + +const User: GQLUserTypeResolver = { + comments: (asset, input, ctx) => + ctx.user ? ctx.loaders.Comments.forUser(ctx.user.id, input) : [], +}; + +export default User; diff --git a/src/core/server/models/comment.ts b/src/core/server/models/comment.ts index bec7cc382..dc64046c1 100644 --- a/src/core/server/models/comment.ts +++ b/src/core/server/models/comment.ts @@ -298,6 +298,30 @@ export async function retrieveCommentAssetConnection( return retrieveConnection(input, query); } +/** + * retrieveCommentUserConnection returns a Connection for a given User's + * comments. + * + * @param db database connection + * @param userID the User id for the comment to retrieve + * @param input connection configuration + */ +export async function retrieveCommentUserConnection( + db: Db, + tenantID: string, + userID: string, + input: ConnectionInput +) { + // Create the query. + const query = new Query(collection(db)).where({ + tenant_id: tenantID, + author_id: userID, + }); + + // Return a connection for the comments query. + return retrieveConnection(input, query); +} + /** * retrieveConnection returns a Connection for the given input and * Query.