Skip to content

Commit fa6b4c1

Browse files
committed
좋아요 개수 및 좋아요 누른 유무 close #267
1 parent f42e037 commit fa6b4c1

File tree

5 files changed

+118
-8
lines changed

5 files changed

+118
-8
lines changed

controller/explorationController.js

+46-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const util = require('../modules/util');
22
const code = require('../modules/statusCode');
33
const message = require('../modules/responseMessage');
44

5-
const { Answer, User, Comment, Question, Scrap, Category } = require('../models');
5+
const { Answer, User, Comment, Question, Scrap, Category, Like } = require('../models');
66
const { homeService, userService } = require('../service');
77
const explorationService = require('../service/explorationService');
88
const answerService = require('../service/answerService');
@@ -223,7 +223,51 @@ module.exports = {
223223
}
224224
},
225225

226-
// 스크랩 하기 & 스크랩 취소하기
226+
// 다른 글 둘러보기 (흥미최신 sorting 쿼리 없는 조건 [NEW]) - 좋아요 기능 추가
227+
getExpAnswersWithoutLen: async (req, res) => {
228+
try {
229+
let { page, category } = req.query;
230+
const user_nickname = req.decoded.id;
231+
232+
// page 오류 처리
233+
if (page == 0) {
234+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.NO_INVALID_PAGE))
235+
}
236+
if (!page) {
237+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.OUT_OF_VALUE));
238+
}
239+
240+
// 카테고리
241+
const category_attr = {};
242+
if ( category ) {
243+
if(category > 0 && category < 7) {
244+
category_attr[Op.eq]= category;
245+
} else {
246+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.INVALID_CATEGORY_ID));
247+
}
248+
249+
} else {
250+
category_attr[Op.not]= null;
251+
}
252+
253+
// 데베에서 가져오기
254+
let answers = await explorationService.sortNewAnswersWithPagination(user_nickname, category_attr, page)
255+
if (answers == message.NO_RESULT) {
256+
res.status(code.OK).send(util.success(code.OK, message.NO_RESULT));
257+
}
258+
259+
// 답변 포맷팅
260+
answers = await explorationService.getFormattedAnswers(answers, user_nickname);
261+
262+
return res.status(code.OK).send(util.success(code.OK, message.GET_EXPLORATION_RESULT_SUCCESS, {user_nickname, answers}))
263+
264+
} catch (err) {
265+
console.error(err);
266+
return res.status(code.INTERNAL_SERVER_ERROR).send(util.fail(code.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR));
267+
}
268+
},
269+
270+
// 스크랩 하기 & 스크랩 취소하기 -> 스크랩 했는지 안했는지 유무 안알려주고 생성 삭제만
227271
doOrCancelScrap: async (req, res) => {
228272
const answer_id = req.params.answerId;
229273
const user_id = req.decoded.id;

models/index.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ db.Answer = require('./answer')(sequelize, Sequelize);
1717
db.Category = require('./category')(sequelize, Sequelize);
1818
db.Question = require('./question')(sequelize, Sequelize);
1919
db.Scrap = require('./scrap')(sequelize, Sequelize);
20+
db.Like = require('./like')(sequelize, Sequelize);
2021
db.Comment = require('./comment')(sequelize, Sequelize);
2122
db.Block = require('./block')(sequelize, Sequelize);
2223
db.Follow = require('./follow')(sequelize, Sequelize);
@@ -48,6 +49,9 @@ db.Comment.belongsTo(db.Comment, { as : 'Parent', foreignKey : 'parent_id'});
4849
db.User.belongsToMany(db.Answer, { through: 'Scrap', as: 'Scrapped', foreignKey: 'user_id' });
4950
db.Answer.belongsToMany(db.User, { through: 'Scrap', as: 'Scrapper', foreignKey: 'answer_id'});
5051

52+
/* User : Answer => like */
53+
db.User.belongsToMany(db.Answer, { through: 'Like', as: 'Liked', foreignKey: 'user_id' });
54+
db.Answer.belongsToMany(db.User, { through: 'Like', as: 'Liker', foreignKey: 'answer_id'});
5155

5256
/* User : User => block */
5357
db.User.belongsToMany(db.User, { through: 'Block', as: 'Blocked', foreignKey : 'blocked_id'});
@@ -61,9 +65,6 @@ db.User.belongsToMany(db.User, { through: 'Follow', as: 'Follower', foreignKey :
6165
db.User.belongsToMany(db.User, { through: 'RecentSearch', as: 'Searched', foreignKey: 'searched_id'});
6266
db.User.belongsToMany(db.User, { through: 'RecentSearch', as: 'Searcher', foreignKey : 'user_id' });
6367

64-
/* User : Certification => like */
65-
db.User.belongsToMany(db.Answer, { through: 'Like', as: 'Liked', foreignKey: 'user_id' });
66-
db.Answer.belongsToMany(db.User, { through: 'Like', as: 'Liker', foreignKey: 'answer_id'});
6768

6869
db.User.hasMany(db.AnswerSearch, {foreignKey: 'user_id'});
6970
db.AnswerSearch.belongsTo(db.User, {foreignKey: 'user_id'});

models/like.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
const Answer = require('./answer')
2-
const User = require('./user')
1+
const { User, Answer } = require('./index');
32

43
module.exports = (sequelize, DataTypes) => {
54
return sequelize.define('Like', {

service/answerService.js

+44
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,28 @@ const getFormattedAnswerwithPK= async (answer_id, user_id) => {
4343
} else {
4444
answer.is_scrapped = true;
4545
}
46+
// 내가 좋아요한 질문인지 확인하기
47+
const isLiked = await Like.findOne({
48+
where : {
49+
user_id,
50+
answer_id,
51+
}
52+
});
53+
if(! isLiked) {
54+
answer.is_liked = false;
55+
} else {
56+
answer.is_liked = true;
57+
}
58+
// 좋아요 개수
59+
const likeCount = await Like.count({
60+
where : {
61+
user_id,
62+
answer_id,
63+
}
64+
});
65+
if(likeCount == 0) {
66+
answer.like_count = likeCount;
67+
}
4668

4769
// 내가 답변한 질문인지 확인하기
4870
const isAnswered = await Answer.findAll({
@@ -156,6 +178,28 @@ const getFormattedAnswerbyPkwithoutComment= async (answer_id, user_id) => {
156178
} else {
157179
answer.is_scrapped = true;
158180
}
181+
// 내가 좋아요한 질문인지 확인하기
182+
const isLiked = await Like.findOne({
183+
where : {
184+
user_id,
185+
answer_id,
186+
}
187+
});
188+
if(! isLiked) {
189+
answer.is_liked = false;
190+
} else {
191+
answer.is_liked = true;
192+
}
193+
// 좋아요 개수
194+
const likeCount = await Like.count({
195+
where : {
196+
user_id,
197+
answer_id,
198+
}
199+
});
200+
if(likeCount == 0) {
201+
answer.like_count = likeCount;
202+
}
159203

160204

161205
// 내가 답변한 질문인지 확인하기

service/explorationService.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { Answer, Question, Comment, Category, User, Scrap, Follow } = require('../models/');
1+
const { Answer, Question, Comment, Category, User, Scrap, Follow, Like} = require('../models/');
22
const models = require('../models/index');
33
const message = require('../modules/responseMessage');
44
const { sequelize } = require('../models/index');
@@ -53,6 +53,28 @@ const getFormattedAnswer = async (answer_id, user_id) => {
5353
} else {
5454
answer.is_scrapped = true;
5555
}
56+
// 내가 좋아요한 질문인지 확인하기
57+
const isLiked = await Like.findOne({
58+
where : {
59+
user_id,
60+
answer_id,
61+
}
62+
});
63+
if(! isLiked) {
64+
answer.is_liked = false;
65+
} else {
66+
answer.is_liked = true;
67+
}
68+
// 좋아요 개수
69+
const likeCount = await Like.count({
70+
where : {
71+
user_id,
72+
answer_id,
73+
}
74+
});
75+
if(likeCount == 0) {
76+
answer.like_count = likeCount;
77+
}
5678

5779

5880
// 내가 답변한 질문인지 확인하기

0 commit comments

Comments
 (0)