Skip to content

Commit

Permalink
[코드 취합]
Browse files Browse the repository at this point in the history
  • Loading branch information
junguksim committed Sep 6, 2019
1 parent 87f28a8 commit a661382
Show file tree
Hide file tree
Showing 5 changed files with 165 additions and 96 deletions.
210 changes: 121 additions & 89 deletions src/app/controller/songs/like.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,125 +8,157 @@ const resMessage = require('../../../config/returnMessage')

const playlistModules = require('../../module/playlistModules') //playlist 통합 모듈

const jwt = require('../../module/jwt');
const pool = require('../../module/pool');

const song = require('../../model/schema/song');
const playlist = require('../../model/schema/playlist');
const myPlaylist = require('../../model/schema/myPlaylist');


/*
곡 좋아요 => 좋아요 플레이리스트에 곡 추가하기
METHOD : POST
URL : /songs/likes
BODY : songIdx = song의 인덱스
userIdx = user의 인덱스
URL : /songs/:songIdx/like
PARAMETER : songIdx = song의 인덱스
*/
router.post('/', async(req, res) => {
const inputUserIdx = req.body.userIdx;
const inputSongIdx = req.body.songIdx;
// default.js -> 회원인지 아닌지 판별

// 곡이 유효한 곡인지 판별
if(!inputUserIdx || !inputSongIdx) {
res.status(200).send(resUtil.successFalse(resCode.BAE_REQUEST, resMessage.OUT_OF_VALUE));
} else {
song.find({_id : inputSongIdx}, async function(err, songSelectResult) {
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.SONG_SELECT_FAIL));
} else {
const likeCheckQuery = 'SELECT * FROM likes WHERE userIdx = ? AND songIdx = ?';
const likeCheckResult = await pool.queryParam_Arr(likeCheckQuery, [inputUserIdx, inputSongIdx]);

if(likeCheckResult.length != 0) { //이미 좋아요 된 상태
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.ALREADY_LIKE_SONGS));
} else {
const likeInsertQuery = 'INSERT INTO likes(userIdx, songIdx) VALUES (?,?)';
const likeInsertResult = await pool.queryParam_Arr(likeInsertQuery, [inputUserIdx, inputSongIdx]);

if(!likeInsertResult) { //좋아요 실패
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_LIKE_SONGS));
const inputSongIdx = req.params.songIdx;

//ID = userIdx
let ID = jwt.verify(req.headers.authorization);


//회원일 경우
if (ID > 0) {
// 곡이 유효한 곡인지 판별
if(!inputSongIdx) {
res.status(200).send(resUtil.successFalse(resCode.BAE_REQUEST, resMessage.OUT_OF_VALUE));
} else {
await song.find({_id : inputSongIdx}, async function(err, songSelectResult) {
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.SONG_SELECT_FAIL));
} else {
const likeCheckQuery = 'SELECT * FROM likes WHERE userIdx = ? AND songIdx = ?';
const likeCheckResult = await pool.queryParam_Arr(likeCheckQuery, [ID, inputSongIdx]);

if(likeCheckResult.length != 0) { //이미 좋아요 된 상태
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.ALREADY_LIKE_SONGS));
} else {
const songInfo = await song.find({"_id" : inputSongIdx});
await song.updateOne({"_id" : inputSongIdx}, {$set : {"likeCount" : songInfo[0].likeCount + 1}});
const likeInsertQuery = 'INSERT INTO likes(userIdx, songIdx) VALUES (?,?)';
const likeInsertResult = await pool.queryParam_Arr(likeInsertQuery, [ID, inputSongIdx]);

if(!likeInsertResult) { //좋아요 실패
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_LIKE_SONGS));
} else {
const songInfo = await song.find({"_id" : inputSongIdx});
await song.updateOne({"_id" : inputSongIdx}, {$set : {"likeCount" : songInfo[0].likeCount + 1}});

const myLikedList = (await playlistModules.getPlayList(inputUserIdx, 'like'))[0];
const songList = myLikedList.songList
const addSong = (await song.find({ _id: inputSongIdx }))[0];
const result = (await myPlaylist.find({ userIdx: ID }))[0];
const myLikedList = (await playlist.find({ _id: result.likePlaylist }))[0];

await songList.push(addSong);

await playlist.updateOne({ _id: myLikedList._id }, { $set: { songList: songList } }, async function(err, updateResult){
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_LIKE_SONGS));
} else {
res.status(200).send(resUtil.successTrue(resCode.NO_CONTENT, resMessage.LIKE_SONGS));
}
});
//const myLikedList = (await playlistModules.getPlayList(ID, 'like'))[0];
const songList = myLikedList.songList
const addSong = (await song.find({ _id: inputSongIdx }))[0];

await songList.push(addSong);

await playlist.updateOne({ _id: myLikedList._id }, { $set: { songList: songList } }, async function(err, updateResult){
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_LIKE_SONGS));
} else {
res.status(200).send(resUtil.successTrue(resCode.NO_CONTENT, resMessage.LIKE_SONGS));
}
});
}
}
}
}
});
});
}
}

//비회원일 경우
else if (ID == -1) {
res.status(200).send(resUtil.successFalse(resCode.FORBIDDEN, "로그인을 해 주세요"));
}
//토큰 검증 실패
else {
res.status(200).send(resUtil.successFalse(resCode.FORBIDDEN, "access denied"));
}
})


/*
곡 좋아요 취소 => 좋아요 플레이리스트에 곡 삭제하기
METHOD : DELETE
URL : /songs/:songIdx/likes/user/:userIdx
URL : /songs/:songIdx/like
PARAMETER : songIdx = song의 인덱스
userIdx = user의 인덱스
*/

router.delete('/', async(req, res) => {
const inputUserIdx = req.params.userIdx;
const inputSongIdx = req.params.songIdx;
// default.js -> 회원인지 아닌지 판별

// 곡이 유효한 곡인지 판별
if(!inputUserIdx || !inputSongIdx) {
res.status(200).send(resUtil.successFalse(resCode.BAE_REQUEST, resMessage.OUT_OF_VALUE));
} else {
song.find({_id : inputSongIdx}, async function(err, songSelectResult) {
if(err) {
console.log(err);
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.SONG_SELECT_FAIL));
} else {
const likeCheckQuery = 'SELECT * FROM likes WHERE userIdx = ? AND songIdx = ?';
const likeCheckResult = await pool.queryParam_Arr(likeCheckQuery, [inputUserIdx, inputSongIdx]);

if(likeCheckResult.length == 0) { //이미 좋아요 취소 된 상태
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.ALREADY_UNLIKE_SONGS));
} else {
const likeDeleteQuery = 'DELETE FROM likes WHERE userIdx = ? AND songIdx = ?';
const likeDeleteResult = await pool.queryParam_Arr(likeDeleteQuery, [inputUserIdx, inputSongIdx]);

if(!likeDeleteResult) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_LIKE_SONGS));
} else {
const songInfo = await song.find({"_id" : inputSongIdx});
await song.updateOne({"_id" : inputSongIdx}, {$set : {"likeCount" : songInfo[0].likeCount - 1}});

const myLikedList = (await playlistModules.getPlayList(inputUserIdx, 'like'))[0];
inputPlaylistIdx = myLikedList._id

const songList = (await playlist.find({ _id: inputPlaylistIdx }))[0].songList;
for (var i in songList) {
if (songList[i]._id == inputSongIdx) {
await songList.splice(i, 1);

//ID = userIdx
let ID = jwt.verify(req.headers.authorization);

//회원일 경우
if (ID > 0) {
// 곡이 유효한 곡인지 판별
if(!inputSongIdx) {
res.status(200).send(resUtil.successFalse(resCode.BAE_REQUEST, resMessage.OUT_OF_VALUE));
} else {
await song.find({_id : inputSongIdx}, async function(err, songSelectResult) {
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.SONG_SELECT_FAIL));
} else {
const likeCheckQuery = 'SELECT * FROM likes WHERE userIdx = ? AND songIdx = ?';
const likeCheckResult = await pool.queryParam_Arr(likeCheckQuery, [ID, inputSongIdx]);

if(likeCheckResult.length == 0) { //이미 좋아요 취소 된 상태
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.ALREADY_UNLIKE_SONGS));
} else {
const likeDeleteQuery = 'DELETE FROM likes WHERE userIdx = ? AND songIdx = ?';
const likeDeleteResult = await pool.queryParam_Arr(likeDeleteQuery, [ID, inputSongIdx]);

if(!likeDeleteResult) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_LIKE_SONGS));
} else {
const songInfo = await song.find({"_id" : inputSongIdx});
await song.updateOne({"_id" : inputSongIdx}, {$set : {"likeCount" : songInfo[0].likeCount - 1}});

const result = (await myPlaylist.find({ userIdx: ID }))[0];
const myLikedList = (await playlist.find({ _id: result.likePlaylist }))[0]
inputPlaylistIdx = myLikedList._id

const songList = (await playlist.find({ _id: inputPlaylistIdx }))[0].songList;
for (var i in songList) {
if (songList[i]._id == inputSongIdx) {
await songList.splice(i, 1);
}
}
await playlist.updateOne({ _id: inputPlaylistIdx }, { $set: { songList: songList } }, async function(err, deleteSongResult){
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_UNLIKE_SONGS));
} else {
res.status(200).send(resUtil.successTrue(resCode.NO_CONTENT, resMessage.UNLIKE_SONGS));
}
});
//const deleteSongResult = await playlistModules.deleteSongFromPlaylist(inputPlaylistIdx, inputSongIdx);
//console.log(deleteSongResult);//삭제는 제대로 되는데 deleteSongResult가 undefined뜸
}
await playlist.updateOne({ _id: inputPlaylistIdx }, { $set: { songList: songList } }, async function(err, deleteSongResult){
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.FAIL_UNLIKE_SONGS));
} else {
res.status(200).send(resUtil.successTrue(resCode.NO_CONTENT, resMessage.UNLIKE_SONGS));
}
});
//const deleteSongResult = await playlistModules.deleteSongFromPlaylist(inputPlaylistIdx, inputSongIdx);
//console.log(deleteSongResult);//삭제는 제대로 되는데 deleteSongResult가 undefined뜸
}
}
}
});
});
}
}

//비회원일 경우
else if (ID == -1) {
res.status(200).send(resUtil.successFalse(resCode.FORBIDDEN, "로그인을 해 주세요"));
}
//토큰 검증 실패
else {
res.status(200).send(resUtil.successFalse(resCode.FORBIDDEN, "access denied"));
}
})
module.exports = router;
2 changes: 1 addition & 1 deletion src/app/controller/songs/songRate.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ router.post('/', async (req, res) => {

//회원일 경우.
if (ID > 0) {

console.log(songIdx);
let result1 = await pool.queryParam_Arr(isRateHistory, [ID, songIdx]);
console.log(result1);
console.log(result1.length);
Expand Down
4 changes: 3 additions & 1 deletion src/app/controller/songs/songUpload.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const pool = require('../../module/pool');
const song = require('../../model/schema/song');
const genre = require('../../module/genre');
const mood = require('../../module/mood')

const playlistModules = require('../../module/playlistModules');

const multiUpload = upload.fields([{
name: 'songUrl'
Expand Down Expand Up @@ -80,7 +80,9 @@ router.post('/', multiUpload, async (req, res) => {
}
else {
inputSongData.originArtistIdx = originArtistData[0].originArtistIdx;
const uploadPlaylistIdx = (await playlistModules.getPlayList(ID, 'upload'))._id;
await song.create(inputSongData, async function(err, docs){
await playlistModules.addSongToPlaylist(uploadPlaylistIdx, docs._id)
res.status(200).send(resUtil.successTrue(returnCode.OK, returnMessage.SONG_UPLOAD_SUCCESS, docs));
})
}
Expand Down
14 changes: 9 additions & 5 deletions src/app/controller/songs/songs_routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@ const express = require('express');
const router = express.Router({mergeParams: true})

//곡 재생
router.use('/songs/:songIdx', require('./getSong'));
//router.use('/songs/:songIdx/user/:userIdx', require('./play'));

// /songs/{songIdx}/like

//곡 좋아요 취소
router.use('/songs/:songIdx/like/user/:userIdx', require('./like'));
//곡 좋아요 /좋아요 취소
router.use('/songs/:songIdx/like', require('./like'));

//곡 좋아요
router.use('/songs/like', require('./like'));
//곡 조회수
router.use('/songs/:songIdx/streaming', require('./streaming'));

//곡 업로드
router.use('/songs', require('./songUpload'));

//곡 평가
router.use('/songs/:songIdx/rate', require('./songRate'));

router.use('/songs/:songIdx', require('./getSong'));

module.exports = router;
31 changes: 31 additions & 0 deletions src/app/controller/songs/streaming.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
const express = require('express');
const router = express.Router({mergeParams: true})

const resUtil = require('../../module/responseUtil')
const resCode = require('../../model/returnCode')
const resMessage = require('../../../config/returnMessage')

const pool = require('../../module/pool')

const song = require('../../model/schema/song')

/*
곡 스트리밍 수
METHOD : POST
URL : /songs/streaming/:songIdx
PARAMETER : songIdx = song의 _id
*/
router.post('/', async (req, res) => {
const inputSongIdx = req.body.songIdx;

const songInfo = await song.find({"_id" : inputSongIdx});
await song.updateOne({"_id" : inputSongIdx}, {$set : {"streamCount" : songInfo[0].streamCount + 1}}, async function(err, streamResult) {
if(err) {
res.status(200).send(resUtil.successFalse(resCode.BAD_REQUEST, resMessage.STREAM_COUNT_UPDATE_FAIL));
} else {
res.status(200).send(resUtil.successTrue(resCode.NO_CONTENT, resMessage.STREAM_COUNT_UPDATE_SUCCESS));
}
});
})

module.exports = router;

0 comments on commit a661382

Please sign in to comment.