Skip to content

Commit b2e5e04

Browse files
committed
265-like 테이블 생성 및 like/like cancel 구현
1 parent 914e1a8 commit b2e5e04

File tree

5 files changed

+84
-0
lines changed

5 files changed

+84
-0
lines changed

controller/explorationController.js

+50
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,56 @@ module.exports = {
269269
return res.status(code.INTERNAL_SERVER_ERROR).send(util.fail(code.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR));
270270
}
271271
},
272+
273+
// 좋아요, 좋아요 취소
274+
likeOrCancel : async (req, res) => {
275+
276+
const answer_id = req.params.answerId;
277+
const user_id = req.decoded.id;
278+
279+
if (! answer_id) {
280+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.NULL_VALUE));
281+
}
282+
try {
283+
284+
const answer = await Answer.findByPk(answer_id);
285+
if(! answer) {
286+
return res.status(code.BAD_REQUEST).send(util.fail(code.BAD_REQUEST, message.INVALID_ANSWER_ID));
287+
}
288+
289+
// 좋아요 유무 확인
290+
const isLiked = await Like.findAll({
291+
where : {
292+
answer_id,
293+
user_id,
294+
}
295+
});
296+
297+
// 이미 좋아요 했을 시 좋아요 취소
298+
if (isLiked.length > 0) {
299+
const like = await Like.destroy({
300+
where : {
301+
user_id,
302+
answer_id
303+
}
304+
});
305+
return res.status(code.OK).send(util.success(code.OK, message.LIKE_CANCEL_SUCCESS));
306+
}
307+
308+
// 좋아요 안했을 시 좋아요 생성
309+
const like = await Like.create({
310+
user_id,
311+
answer_id
312+
});
313+
return res.status(code.OK).send(util.success(code.OK, message.LIKE_SUCCESS));
314+
315+
} catch (err) {
316+
console.error(err);
317+
return res.status(code.INTERNAL_SERVER_ERROR).send(util.fail(code.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR));
318+
}
319+
},
320+
321+
272322
// 카테고리 리스트 가져오기
273323
getCategories: async (req, res) => {
274324
try {

models/index.js

+4
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ db.User.belongsToMany(db.User, { through: 'Follow', as: 'Follower', foreignKey :
6161
db.User.belongsToMany(db.User, { through: 'RecentSearch', as: 'Searched', foreignKey: 'searched_id'});
6262
db.User.belongsToMany(db.User, { through: 'RecentSearch', as: 'Searcher', foreignKey : 'user_id' });
6363

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'});
67+
6468
db.User.hasMany(db.AnswerSearch, {foreignKey: 'user_id'});
6569
db.AnswerSearch.belongsTo(db.User, {foreignKey: 'user_id'});
6670

models/like.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const Answer = require('./answer')
2+
const User = require('./user')
3+
4+
module.exports = (sequelize, DataTypes) => {
5+
return sequelize.define('Like', {
6+
user_id: { // 좋아요 한 사용자
7+
type: DataTypes.INTEGER,
8+
reference: {
9+
model: User,
10+
key: 'id',
11+
}
12+
},
13+
answer_id: { // 좋아요 달린 인증게시물
14+
type: DataTypes.INTEGER,
15+
reference: {
16+
model: Answer,
17+
key: 'id',
18+
}
19+
}
20+
}, {
21+
freezeTableName: true,
22+
timestamps: true,
23+
underscored: true,
24+
});
25+
};

modules/responseMessage.js

+4
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ module.exports = {
8888
DO_SCRAP_SUCCESS: "스크랩 성공",
8989
UNDO_SCRAP_SUCCESS: "스크랩 취소 성공",
9090

91+
/* */
92+
LIKE_SUCCESS : "좋아요 성공",
93+
LIKE_CANCEL_SUCCESS : "좋아요 취소 성공",
94+
9195
/* 댓글 */
9296
POST_COMMENT_SUCCESS: "댓글 생성하기 성공",
9397
POST_COMMENT_BLOCKED : "댓글이 허용되지 않은 답변입니다",

routes/exploration/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ router.get('/all', authUtil.checkToken, exController.getExpAnswersWithoutLen);
1111
router.get('/:questionId', authUtil.checkToken, exController.getSpecificAnswers);
1212
router.get('/all/:questionId', authUtil.checkToken, exController.getSpecificAnswersWithoutLen);
1313
router.put('/:answerId', authUtil.checkToken, exController.doOrCancelScrap);
14+
router.put('/like/:answerId', authUtil.checkToken, exController.likeOrCancel);
1415

1516

1617
module.exports = router;

0 commit comments

Comments
 (0)