diff --git a/src/app/controller/user/email-check.js b/src/app/controller/user/email-check.js new file mode 100644 index 0000000..9d1f404 --- /dev/null +++ b/src/app/controller/user/email-check.js @@ -0,0 +1,88 @@ +const express = require('express'); +const router = express.Router(); +const pool = require('../../module/pool.js'); +const nodemailer = require('nodemailer'); +const smtpPool = require('nodemailer-smtp-pool'); + +const returnCode = require('../../model/returnCode'); +const returnMessage = require('../../../config/returnMessage'); +const responseUtil = require('../../module/responseUtil'); + +//인증번호 값 +const rand = Math.floor(Math.random() * 1000000)+100000; + +//유효한 email인지 확인 +router.get('/', async (req, res, next) => { + const selectEmailQuery = 'SELECT email FROM user WHERE email = ?'; + const selectEmailResult = await pool.queryParam_Arr(selectEmailQuery, req.body.email); + + if(selectEmailResult[0] == null){ + console.log('이메일 일치 없음'); + + const config = { + mailer: { + service: 'Gmail', + host: 'localhost', + port: '465', + user: 'jinee071732@gmail.com', + password: 'k1207417', + } + }; + + const from = 'WAVE'; + const to = req.body.email; + const subject = 'WAVE 회원가입 인증 메일입니다'; + const html = '

인증번호는 '+ rand + ' 입니다.\n 인증번호 창에 입력해주세요.'; + + const mailOptions = { + from, + to, + subject, + html + }; + + const transporter = nodemailer.createTransport(smtpPool({ + service: config.mailer.service, + host: config.mailer.host, + port: config.mailer.port, + auth: { + user: config.mailer.user, + pass: config.mailer.password, + }, + tls: { + rejectUnauthorize: false, + }, + maxConnections: 5, + maxMessages: 10, + })); + + transporter.sendMail(mailOptions, (err, res) => { + if (err) { + console.log('failed... => ', err); + res.status(200).send(responseUtil.successFalse(returnCode.BAD_REQUEST, returnMessage.SEND_EMAIL_FAIL)); + } else { + console.log('succeed... => ', res); + res.status(200).send(responseUtil.successTrue(returnCode.OK, returnMessage.SEND_EMAIL)); + } + transporter.close(); + }); + res.status(200).send(responseUtil.successTrue(returnCode.OK, returnMessage.EMAIL_CHECK_SUCCESS)); + }else{ + console.log('중복 이메일 존재'); + res.status(200).send(responseUtil.successFalse(returnCode.DB_ERROR, returnMessage.DUPLICATED_EMAIL_FAIL)); + } +}); + +//인증번호 확인 +router.get('/authentication', async(req, res, next) =>{ + const user_rand = String(req.body.code); + if(user_rand == rand){ + console.log('인증 성공'); + res.status(200).send(responseUtil.successTrue(returnCode.OK, returnMessage.AUTHENTICATION_SAME)); + }else{ + console.log('인증 실패'); + res.status(200).send(responseUtil.successFalse(returnCode.BAD_REQUEST, returnMessage.AUTHENTICATION_FALSE)); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/src/app/controller/user/nickname-check.js b/src/app/controller/user/nickname-check.js new file mode 100644 index 0000000..9ea01bd --- /dev/null +++ b/src/app/controller/user/nickname-check.js @@ -0,0 +1,23 @@ +const express = require('express'); +const router = express.Router(); +const pool = require('../../module/pool.js'); + +const returnCode = require('../../model/returnCode'); +const returnMessage = require('../../../config/returnMessage'); +const responseUtil = require('../../module/responseUtil'); + +//nickname 중복 체크 +router.get('/', async (req, res, next) => { + const selectNicknameQuery = 'SELECT nickname FROM user WHERE nickname = ?'; + const selectNicknameResult = await pool.queryParam_Arr(selectNicknameQuery, req.body.nickname); + + if(selectNicknameResult[0] == null){ // 닉네임 중복이 없을 때 + console.log('닉네임 사용 가능'); + res.status(200).send(responseUtil.successTrue(returnCode.OK, returnMessage.NICKNAME_CHECK_SUCCESS)); + }else{ // 닉네임이 중복될 때 + console.log('닉네임 중복'); + res.status(200).send(responseUtil.successFalse(returnCode.DB_ERROR, returnMessage.DUPLICATED_NICKNAME_FAIL)); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/src/app/controller/user/signin.js b/src/app/controller/user/signin.js index 0b11e6f..1ee9994 100644 --- a/src/app/controller/user/signin.js +++ b/src/app/controller/user/signin.js @@ -2,7 +2,7 @@ const express = require('express'); const router = express.Router(); const db = require('../../module/pool.js'); const jwt = require('../../module/jwt.js'); -const hash = require('../../module/hash.js'); +const hash = require('../../module/hash.js').key; router.post('/', async(req, res, next) => { const email = req.body.email; @@ -38,4 +38,10 @@ router.post('/', async(req, res, next) => { } }); +//로그인 +router.post('/', async(req, res, next)=>{ + const email = req.body.email; + const password = req.body.password; +}); + module.exports = router; \ No newline at end of file diff --git a/src/app/controller/user/signup.js b/src/app/controller/user/signup.js index f85366f..0952b36 100644 --- a/src/app/controller/user/signup.js +++ b/src/app/controller/user/signup.js @@ -1,137 +1,84 @@ const express = require('express'); const router = express.Router(); -const db = require('../../module/pool.js'); -const nodemailer = require('nodemailer'); -const smtpPool = require('nodemailer-smtp-pool'); -const hash = require('../../../config/hashKey'); -//var smtpTransport = require('nodemailer-smtp-transport'); - +const pool = require('../../module/pool.js'); +const hash = require('../../../config/hashKey').key; const crypto = require('crypto-promise'); +const upload = require('../../../config/multer'); const returnCode = require('../../model/returnCode'); const returnMessage = require('../../../config/returnMessage'); const responseUtil = require('../../module/responseUtil'); -//인증번호 값 -const rand = Math.floor(Math.random() * 1000000)+100000; -//salt 값 -const hashKey = hash.key; - -//회원가입 -router.post('/', async (req, res, next) => { - - const QUERY = 'insert into USER set ?'; - let newUser = signup.new(req.body); - let inserted = await db.execute2(QUERY, newUser); - - if (inserted == undefined) { - res.status(405).send({ - message: 'please check email' - }); - } else { - await myIntro.create({ - user_idx: inserted.insertId, - intro_contents: "", - intro_img_url: [] - }); - res.status(201).send({ - message: "success" - }); - } -}); +const playlist = require('../../model/schema/playlist'); +const myPlaylist = require('../../model/schema/myPlaylist'); //회원가입 -router.post('/', async (req, res, next) => { - const selectEmailQuery = 'SELECT nickname FROM user WHERE nickname = ?' - const selectEmailResult = await db.queryParam_Arr(selectEmailQuery, req.body.nickname); - const signupQuery = 'INSERT INTO user (email, password, nickname, profileImg, comment) VALUES (?, ?, ?, ?, ?)'; - - if (selectEmailResult[0] == null) { // 해당 이메일로 가입한 유저가 없을 시 - console.log("일치 없음"); - const buf = await crypto.randomBytes(64); - const salt = buf.toString('base64'); - const hashedPw = await crypto.pbkdf2(req.body.user_pw.toString(), salt, 1000, 32, 'SHA512'); +router.post('/', upload.single('profileImg'), async (req, res, next) => { + const hashedPw = await crypto.pbkdf2(req.body.password.toString('utf8'), hash, 1000, 32, 'SHA512'); + const profileImg = req.file.location; - const signupResult = await db.queryParam_Arr(signupQuery, [req.body.user_id, req.body.user_name, hashedPw.toString('base64'), salt]); - if (!signupResult) { - res.status(200).send(defaultRes.successFalse(statusCode.DB_ERROR, resMessage.SIGNUP_FAIL)); - } else { //쿼리문이 성공했을 때 - res.status(200).send(defaultRes.successTrue(statusCode.OK, resMessage.SIGNUP_SUCCESS)); - } - } else {// 이미 존재 - console.log("이미 존재"); - res.status(200).send(responseUtil.successFalse(returnCode.OK, returnMessage.DUPLICATED_ID_FAIL)); - } + const signupQuery = 'INSERT INTO user (email, password, nickname, profileImg, comment) VALUES (?, ?, ?, ?, ?)'; + const signupResult = await pool.queryParam_Arr(signupQuery, [req.body.email, hashedPw.toString('base64'), req.body.nickname, profileImg, req.body.comment]); + + if (!signupResult) { + res.status(200).send(responseUtil.successFalse(returnCode.DB_ERROR, returnMessage.SIGNUP_FAIL)); + } else { //쿼리문이 성공했을 때 -}); + const bodylen = req.body.genre.length; + console.log(bodylen); + + const selectUserIdxQuery = 'SELECT userIdx FROM user WHERE (email = ?)'; + const selectUserIdxResult = await pool.queryParam_Arr(selectUserIdxQuery, [req.body.email]); + console.log(selectUserIdxResult[0]); + const selectedUserIdx = selectUserIdxResult[0].userIdx; -//유효한 email인지 확인 -router.get('/email-verify', async (req, res, next) => { + if(selectUserIdxResult[0]==null){ + console.log('해당 유저 정보 없음'); + res.status(200).send(responseUtil.successFalse(returnCode.DB_ERROR, returnMessage.NULL_VALUE)); + }else{ + for (i=0; i { - if (err) { - console.log('failed... => ', err); - } else { - console.log('succeed... => ', res, rand); + console.log('플레이리스트 목록 생성 완료'); + for(var i = 0 ; i < 6; i++) { + //const defaultPlaylistIdx = new Array(); + defaultPlaylistIdx[i] = (await playlist.find({"userIdx" : selectedUserIdx}))[i]._id; } - transporter.close(); - }); - }else{ - console.log('중복 이메일 존재'); - res.status(200).send(defaultRes.successFalse(returnCode.DB_ERROR, resMessage.SIGNUP_FAIL)); - } -}); + console.log('플레이리스트 블록 2 완료'); -//인증번호 확인 -router.get('/authentication', async(req, res, next) =>{ - const user_rand = String(req.body.authentication); - if(user_rand == rand){ - console.log('인증 성공'); - }else{ - console.log('인증 실패'); + await myPlaylist.create({ + userIdx : selectedUserIdx, + historyPlaylist : defaultPlaylistIdx[0], + likePlaylist : defaultPlaylistIdx[1], + rateReadyPlaylist : defaultPlaylistIdx[2], + ratedPlaylist : defaultPlaylistIdx[3], + uploadPlaylist : defaultPlaylistIdx[4], + hitsPlaylist : defaultPlaylistIdx[5] + }) + console.log('플레이리스트 블록 3 완료'); + res.status(200).send(responseUtil.successTrue(returnCode.OK, returnMessage.SIGNUP_SUCCESS)); + } } }); diff --git a/src/app/controller/user/user_routes.js b/src/app/controller/user/user_routes.js index 4e924e1..62502e3 100644 --- a/src/app/controller/user/user_routes.js +++ b/src/app/controller/user/user_routes.js @@ -7,6 +7,12 @@ router.use('/user/signup', require('./signup')); // signin router.use('/user/signin', require('./signin')); +// email 유효성 , 중복 확인 +router.use('/user/email-verify', require('./email-check')); + +// nickname 중복 확인 +router.use('/user/nickname-check', require('./nickname-check')); + // // 평가곡 개수 // router.use('/rate-count', require('./rate-count')); diff --git a/src/app/module/genre.js b/src/app/module/genre.js index d237696..49240a3 100644 --- a/src/app/module/genre.js +++ b/src/app/module/genre.js @@ -1,7 +1,7 @@ module.exports = { - g1: '발라드', + g1: 'Ballad', g2: 'POP', - g3: '힙합', - g4: '락', - g5: '댄스' - } \ No newline at end of file + g3: 'Hiphop', + g4: 'Rock', + g5: 'Dance' +}