From 0fbbc18e55f6a39a254600cfc52321b77945c21f Mon Sep 17 00:00:00 2001 From: khl6235 Date: Thu, 11 Nov 2021 00:45:45 +0900 Subject: [PATCH] FIX: no data handling & pool release #4, #6 --- vinyla/controllers/vinyl.js | 19 +++-- vinyla/models/user.js | 2 +- vinyla/models/vinyl.js | 136 ++++++++++++++---------------- vinyla/modules/pool.js | 21 +++-- vinyla/modules/responseMessage.js | 4 +- 5 files changed, 94 insertions(+), 88 deletions(-) diff --git a/vinyla/controllers/vinyl.js b/vinyla/controllers/vinyl.js index c68dedb..b0369dc 100644 --- a/vinyla/controllers/vinyl.js +++ b/vinyla/controllers/vinyl.js @@ -2,6 +2,7 @@ const util = require('../modules/util'); const resMessage = require('../modules/responseMessage'); const statusCode = require('../modules/statusCode'); const VinylModel = require('../models/vinyl'); +// const { catch } = require('../config/database'); module.exports = { search: async(req, res) => { @@ -9,9 +10,12 @@ module.exports = { if(!q){ return await res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, resMessage.NULL_VALUE)); } - - const searchResult = await VinylModel.search(q); - return await res.status(statusCode.OK).send(util.success(statusCode.OK, resMessage.DISCOGS_SEARCH_SUCCESS, searchResult)); + try{ + const searchResult = await VinylModel.search(q); + return await res.status(statusCode.OK).send(util.success(statusCode.OK, resMessage.DISCOGS_SEARCH_SUCCESS, searchResult)); + } catch(err){ + return await res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, resMessage.DISCOGS_SEARCH_FAIL)); + } }, detail: async(req, res) => { @@ -19,8 +23,11 @@ module.exports = { if(!id){ return await res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, resMessage.NULL_VALUE)); } - - const searchDetailResult = await VinylModel.detail(id); - return await res.status(statusCode.OK).send(util.success(statusCode.OK, resMessage.DISCOGS_SEARCH_DETAIL_SUCCESS, searchDetailResult)); + try{ + const searchDetailResult = await VinylModel.detail(id); + return await res.status(statusCode.OK).send(util.success(statusCode.OK, resMessage.DISCOGS_SEARCH_DETAIL_SUCCESS, searchDetailResult)); + } catch(err){ + return await res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, resMessage.DISCOGS_SEARCH_DETAIL_FAIL)); + } } }; diff --git a/vinyla/models/user.js b/vinyla/models/user.js index 11d49fe..4c27f0c 100644 --- a/vinyla/models/user.js +++ b/vinyla/models/user.js @@ -35,7 +35,7 @@ const user = { } }, - duplicateCheck : async({nickname}) => { + duplicateCheck : async(nickname) => { try{ const sql = `SELECT COUNT(*) as cnt FROM user WHERE nickname = ?`; const value = [nickname]; diff --git a/vinyla/models/vinyl.js b/vinyla/models/vinyl.js index 26f4822..f2f5917 100644 --- a/vinyla/models/vinyl.js +++ b/vinyla/models/vinyl.js @@ -4,110 +4,100 @@ const discogsKey = require('../config/discogsKey'); const Discogs = require('disconnect').Client; const vinylSearchDto = require('../data/dto/vinylSearchDto'); const vinylSearchDetailDto = require('../data/dto/vinylSearchDetailDto'); +// const { catch } = require('../config/database'); const vinyl = { - search: (q) => { + search: async(q) => { const dis = new Discogs({ consumerKey: discogsKey.key, consumerSecret: discogsKey.secret }); - return new Promise((resolve, reject) => { - const db = dis.database(); - db.search({q: q, type: 'release'}) - .then(res => { - const data = res.results; - let results = []; - Promise.all(data.map(async(elem) => { - elem.artist = elem.title.split('-')[0].trim(); - elem.title = elem.title.split('-')[1].trim(); - results.push({ - 'id': elem.id, - 'thumb': elem.thumb, - 'title': elem.title, - 'artist': elem.artist - }); - results.map(vinylSearchDto); - })); - resolve(results); - }) - .catch(err => { - console.log('[VINYLSEARCH] err' + err); - reject(err); - }); - }); - + try{ + const db = await dis.database().search({q: q, type: 'release'}); + const data = db.results; + let results = []; + Promise.all(data.map(async(elem) => { + elem.artist = elem.title.split('-')[0].trim(); + elem.title = elem.title.split('-')[1].trim(); + results.push({ + 'id': elem.id, + 'thumb': elem.thumb, + 'title': elem.title, + 'artist': elem.artist + }); + results.map(vinylSearchDto); + })); + return results; + } + catch(err){ + console.log('[VINYLSEARCH] err: ' + err); + throw err; + } }, - detail: (id) => { + + detail: async(id) => { const dis = new Discogs({ consumerKey: discogsKey.key, consumerSecret: discogsKey.secret }); + + try{ + const db = await dis.database().getRelease(id); + let result = []; + let tl = []; - return new Promise((resolve, reject) => { - const db = dis.database(); - db.getRelease(id) - .then(res => { - let result = []; - const primary = res.images.find(elem => { - if(elem.type === 'primary'){ - return true; - } - }).uri; + const primaryImg = db.images.find(elem => { + if(elem.type === 'primary'){ + return true; + } + }).uri; - let tl = []; - res.tracklist.forEach(elem => { - tl.push(elem.title); - }); - - let rate, rateCount; - findRate(id) - .then(rateRes => { - result.push({ - "id": res.id, - "title": res.title, - "artist": res.artists[0].name, - "image": primary, - "year": res.year, - "genres": res.genres, - "tracklist": tl - }); - if(rateRes == 0){ - result[0].rate = 0; - result[0].rateCount = 0; - } - else{ - result[0].rate = rate; - result[0].rateCount = rateCount; - } - result.map(vinylSearchDetailDto); - resolve(result[0]); - }); - }) - .catch(err => { - console.log('[VINYLSEARCHDETAIL] err' + err); - reject(err); + db.tracklist.forEach(elem => { + tl.push(elem.title); }); - }); + const [rate, rateCount] = await findRate(id); + + result.push({ + "id": db.id, + "title": db.title, + "artist": db.artists[0].name, + "image": primaryImg, + "year": db.year, + "genres": db.genres, + "tracklist": tl + }); + result[0].rate = rate; + result[0].rateCount = rateCount; + result.map(vinylSearchDetailDto); + return result[0]; + } + catch(err){ + console.log('[VINYLSEARCHDETAIL] err: ' + err); + throw err; + } async function findRate(id){ + const rateInfo = []; try{ const sql = `SELECT rate, rateCount FROM vinyl WHERE id = ?`; const value = [id]; const rs = await pool.queryParam_Parse(sql, value); if(rs[0]){ - return rs[0].rate, rs[0].rateCount; + rateInfo.push(rs[0].rate); + rateInfo.push(rs[0].rateCount); } else{ - return 0; + rateInfo.push(0); + rateInfo.push(0); } + return rateInfo; } catch(err) { console.log('[SEARCHDETAILRATE] err: ' + err); throw err; } } - } }; diff --git a/vinyla/modules/pool.js b/vinyla/modules/pool.js index b469688..a03e21c 100644 --- a/vinyla/modules/pool.js +++ b/vinyla/modules/pool.js @@ -8,10 +8,12 @@ module.exports = { const connection = await pool.getConnection(); try { const result = await connection.query(query); - pool.releaseConnection(connection); + // pool.releaseConnection(connection); + connection.release(); resolve(result); } catch (err) { - pool.releaseConnection(connection); + // pool.releaseConnection(connection); + connection.release(); reject(err); } } catch (err) { @@ -26,10 +28,12 @@ module.exports = { const connection = await pool.getConnection(); try { const result = await connection.query(query, value); - pool.releaseConnection(connection); + // pool.releaseConnection(connection); + connection.release(); resolve(result); } catch (err) { - pool.releaseConnection(connection); + // pool.releaseConnection(connection); + connection.release(); reject(err); } } catch (err) { @@ -51,7 +55,8 @@ module.exports = { } console.log(queryError); } - pool.releaseConnection(connection); + connection.release(); + // pool.releaseConnection(connection); } catch (connectionError) { console.log(connectionError); } @@ -72,11 +77,13 @@ module.exports = { await connection.beginTransaction(); args.forEach(async (it) => await it(connection)); await connection.commit(); - pool.releaseConnection(connection); + // pool.releaseConnection(connection); + connection.release(); resolve(result); } catch (err) { await connection.rollback() - pool.releaseConnection(connection); + // pool.releaseConnection(connection); + connection.release(); reject(err); } } catch (err) { diff --git a/vinyla/modules/responseMessage.js b/vinyla/modules/responseMessage.js index cfe8c6c..bad88a9 100644 --- a/vinyla/modules/responseMessage.js +++ b/vinyla/modules/responseMessage.js @@ -15,5 +15,7 @@ module.exports = { // Vinyl DISCOGS_SEARCH_SUCCESS: "바이닐 검색 성공", - DISCOGS_SEARCH_DETAIL_SUCCESS: "바이닐 상세 조회 성공" + DISCOGS_SEARCH_FAIL: "바이닐 검색 실패", + DISCOGS_SEARCH_DETAIL_SUCCESS: "바이닐 상세 조회 성공", + DISCOGS_SEARCH_DETAIL_FAIL: "바이닐 상세 조회 실패" } \ No newline at end of file