Skip to content

Commit b7ddf08

Browse files
committed
feat: createComment/getComments method implemented
1 parent b6973bf commit b7ddf08

File tree

9 files changed

+163
-28
lines changed

9 files changed

+163
-28
lines changed

src/index.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
1-
const { ApolloServer } = require("apollo-server");
2-
const queries = require("./typedefs-resolvers/_queries");
3-
const dotenv = require("dotenv");
4-
const { posts, users } = require("./typedefs-resolvers");
5-
const connectDB = require("./loaders/db");
1+
const { ApolloServer } = require('apollo-server');
2+
const queries = require('./typedefs-resolvers/_queries');
3+
const mutations = require('./typedefs-resolvers/_mutations');
4+
const dotenv = require('dotenv');
5+
const { posts, users, comments } = require('./typedefs-resolvers');
6+
const connectDB = require('./loaders/db');
67

78
dotenv.config();
89
connectDB();
910

10-
const typeDefs = [queries, posts.typeDefs, users.typeDefs];
11-
const resolvers = [posts.resolvers, users.resolvers];
12-
const server = new ApolloServer({ typeDefs, resolvers, introspection: true, playground: true });
11+
const typeDefs = [
12+
queries,
13+
mutations,
14+
users.typeDefs,
15+
posts.typeDefs,
16+
comments.typeDefs,
17+
];
18+
const resolvers = [users.resolvers, posts.resolvers, comments.resolvers];
19+
const server = new ApolloServer({
20+
typeDefs,
21+
resolvers,
22+
introspection: true,
23+
playground: true,
24+
});
1325

1426
server.listen().then(({ url }) => {
1527
console.log(`server ready at ${url}`);

src/models/Comment.js

+22-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
1-
const mongoose = require("mongoose");
1+
const mongoose = require('mongoose');
22

33
const CommentSchema = new mongoose.Schema(
4-
{
5-
content: {
6-
type: String,
7-
required: true
8-
},
9-
parent: {
10-
type: mongoose.Types.ObjectId,
11-
ref: "Comment"
12-
}
4+
{
5+
content: {
6+
type: String,
7+
required: true,
138
},
14-
{ timestamps: true }
9+
parent: {
10+
type: mongoose.Types.ObjectId,
11+
ref: 'Comment',
12+
},
13+
post: {
14+
type: mongoose.Types.ObjectId,
15+
required: true,
16+
ref: 'Post',
17+
},
18+
writer: {
19+
type: mongoose.Types.ObjectId,
20+
required: true,
21+
ref: 'User',
22+
},
23+
},
24+
{ timestamps: true }
1525
);
1626

17-
module.exports = mongoose.model("Comment", CommentSchema);
27+
module.exports = mongoose.model('Comment', CommentSchema);

src/services/commentService.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const Comment = require('../models/Comment');
2+
const dayjs = require('dayjs');
3+
4+
const createComment = async (args) => {
5+
try {
6+
const { content, post, parent, writer } = args.comment;
7+
const comment = new Comment({
8+
content: content,
9+
post: post,
10+
parent: parent,
11+
writer: writer,
12+
});
13+
14+
await comment.save();
15+
16+
return comment;
17+
} catch (error) {
18+
console.log(error);
19+
throw error;
20+
}
21+
};
22+
23+
const getComments = async (postId) => {
24+
try {
25+
const comments = await Comment.find({
26+
post: postId,
27+
// parent: null,
28+
})
29+
.populate('post')
30+
.populate('writer')
31+
.sort({ createdAt: -1 });
32+
33+
const data = await Promise.all(
34+
comments.map((comment) => {
35+
const result = {
36+
_id: comment._id,
37+
writer: comment.writer.name,
38+
writerProfile: comment.writer.intro,
39+
content: comment.content,
40+
date: `${dayjs(new Date()).diff(comment.createdAt, 'hour')}`,
41+
};
42+
return result;
43+
})
44+
);
45+
46+
return data;
47+
} catch (error) {
48+
console.log(error);
49+
throw error;
50+
}
51+
};
52+
53+
module.exports = { createComment, getComments };

src/services/index.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
const postService = require("./postService")
2-
const userService = require("./userService")
3-
module.exports = { postService, userService }
1+
const postService = require('./postService');
2+
const userService = require('./userService');
3+
const commentService = require('./commentService');
4+
module.exports = { postService, userService, commentService };

src/typedefs-resolvers/_mutations.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const { gql } = require('apollo-server');
2+
3+
const typeDefs = gql`
4+
type Mutation {
5+
createComment(comment: CreateCommentInput!): Comment!
6+
}
7+
`;
8+
9+
module.exports = typeDefs;

src/typedefs-resolvers/_queries.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
const { gql } = require("apollo-server");
1+
const { gql } = require('apollo-server');
22

33
const typeDefs = gql`
44
type Query {
55
posts: Post
6-
76
users(_id: ID): [User]
7+
comments(_id: ID): [ResponseComment!]
88
}
99
`;
1010

src/typedefs-resolvers/comments.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const { gql } = require('apollo-server');
2+
const { commentService } = require('../services');
3+
4+
const typeDefs = gql`
5+
type Comment {
6+
_id: ID!
7+
content: String!
8+
post: ID!
9+
parent: ID
10+
writer: ID!
11+
}
12+
13+
type ResponseComment {
14+
_id: ID!
15+
writer: ID!
16+
writerProfile: String!
17+
content: String!
18+
"""
19+
현재시간과 댓글을 올린 시간의 차이
20+
"""
21+
date: String!
22+
}
23+
24+
input CreateCommentInput {
25+
content: String!
26+
post: ID!
27+
parent: ID
28+
writer: ID!
29+
}
30+
`;
31+
32+
const resolvers = {
33+
Query: {
34+
comments: async (_, args) => await commentService.getComments(args._id),
35+
},
36+
Mutation: {
37+
createComment: async (_, args) => await commentService.createComment(args),
38+
},
39+
};
40+
41+
module.exports = {
42+
typeDefs: typeDefs,
43+
resolvers: resolvers,
44+
};

src/typedefs-resolvers/index.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
const posts = require("./posts");
2-
const users = require("./users");
3-
module.exports = { posts, users };
1+
const posts = require('./posts');
2+
const users = require('./users');
3+
const comments = require('./comments');
4+
module.exports = { posts, users, comments };

yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,11 @@
269269
resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz"
270270
integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==
271271

272+
"@types/node@^14.11.2":
273+
version "14.18.21"
274+
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.21.tgz#0155ee46f6be28b2ff0342ca1a9b9fd4468bef41"
275+
integrity sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==
276+
272277
"@types/qs@*":
273278
version "6.9.7"
274279
resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz"

0 commit comments

Comments
 (0)