diff --git a/server/activity.js b/server/activity.js new file mode 100644 index 0000000..8498a13 --- /dev/null +++ b/server/activity.js @@ -0,0 +1,279 @@ +const express = require('express'); +const cookieParser = require('cookie-parser'); +const mysql = require('mysql'); +const router = express.Router(); +const cors = require('cors'); +const e = require('express'); + +require('dotenv').config(); + +var db =mysql.createConnection({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE +}); + +router.use(cors()); +router.use(cookieParser()); +router.use(express.urlencoded({ extended: true })); +router.use(express.json()); + +//유저별 필터 저장 --> 개인화 부분 +router.post('/preference', (req, res) => { + const user_id = req.body.user_id; //user이름 + db.query('SELECT learn, travel, art, sports, foods, walk, chronic, breathe, surprised, people, diet FROM user WHERE login_id = ?', [user_id], function(error, results, fields) { + if (error) { + console.log("message: cannot get info from SQL"); + throw error; + } + console.log(JSON.parse(JSON.stringify(results[0]))); + console.log("success!!"); + res.send(JSON.parse(JSON.stringify(results[0]))); + }); +}); + +//filter 동작 구현 +router.post('/filter', (req, res) => { + // json 파일 형식 + // { + + // "travel":1, + // "art": 0, + // "sports":0, + // "foods":0, + // "walk":1, + // "chronic":0, + // "breathe":0, + // "surprised":0, + // "people":0, + // "diet":0 + // } + + //1/2 화면 필터링 + // const bodyPass = {}; + // bodyPass[0] = req.body.learn; + // bodyPass[1] = req.body.travel; + // bodyPass[2]= req.body.art; + // bodyPass[3] = req.body.sports; + // bodyPass[4] = req.body.foods; + + // //2/2 화면 필터링 + // const walk = req.body.walk; + // const chronic = req.body.chronic; + // const breathe = req.body.breathe; + // const surprised = req.body.surprised; + // const people = req.body.people; + // const diet = req.body.diet; + + // db.query('SELECT name, platform, price FROM activities WHERE activities.learn = ? OR activities.travel = ? OR activities.art = ? OR activities.sports = ? OR activities.foods = ? OR activities.walk = ? OR activities.chronic = ? OR activities.breathe = ? OR activities.surprised = ? OR activities.people = ? OR activities.diet = ?', [learn, travel, art, sports, foods, walk, chronic, breathe, surprised, people, diet], function(error, results, fields) { + // if (error) { + // console.log("message: cannot get info from SQL"); + // throw error; + // } + // console.log(JSON.parse(JSON.stringify(results))); + // console.log("success!!"); + // res.send(JSON.parse(JSON.stringify(results))); + // }); + + //user_id body로 받아오기 + const feature = new Array(11); + const label = new Array(11); + const final = new Array(11); + const user = req.body.login_id; + console.log(user) + if(user!=undefined){ + db.query(`CREATE TABLE if not exists ${user}filter LIKE activities;`, function(error, results, fields) { + console.log("creation success"); + }); + db.query('SELECT * FROM user WHERE login_id =?', [user] , function(error, results, fields) { + if (error) { + console.log("message: cannot get info from SQL"); + } + console.log(results); + + // 첫번째 페이지 + const learn = results[0].learn; + feacure[0] = "learn"; + label[0] = learn; + + const travel = results[0].travel; + feature[1] = "travel"; + label[1] = travel; + + const art = results[0].art; + feature[2] = "art"; + label[2] = art; + + const sports = results[0].sports; + feature[3] = "sports"; + label[3] = sports; + + const foods = results[0].foods; + feature[4] = "foods"; + label[4] = foods; + + var cnt = 0; + + console.log("feature: "+feature); + console.log("label: "+label); + + for (let i = 0; i < 5; i++) { + if(label [i] == 1){ + final[cnt] = feature[i]; + cnt = cnt+1; + } + } + console.log("final: "+typeof final[0]+" cnt: "+ cnt); + + JSON.stringify() + + if(cnt == 0){ + db.query(`INSERT INTO ${user}filter SELECT * FROM activities`, function(error, results){ + console.log(results); + }); + }else if(cnt == 1){ + db.query(`INSERT INTO ${user}filter SELECT * FROM activities WHERE ${final[0]} = 1`, function(error, results){ + console.log(results); + }); + }else if (cnt == 2){ + db.query(`INSERT INTO ${user}filter SELECT * FROM activities WHERE ${final[0]} = 1 OR ${final[1]} = 1`, function(error, results){ + console.log(results); + }); + }else if (cnt == 3){ + db.query(`INSERT INTO ${user}filter SELECT * FROM activities WHERE ${final[0]} = 1 OR ${final[1]} = 1 OR ${final[2]} = 1`, function(error, results){ + console.log(results); + }); + }else if (cnt == 4){ + db.query(`INSERT INTO ${user}filter SELECT * FROM activities WHERE ${final[0]} = 1 OR ${final[1]} = 1 OR ${final[2]} = 1 OR ${final[3]} = 1`, function(error, results){ + console.log(results); + }); + }else{ + db.query(`INSERT INTO ${user}filter SELECT * FROM activities WHERE ${final[0]} = 1 OR ${final[1]} = 1 OR ${final[2]} = 1 OR ${final[3]} = 1 OR ${final[4]} = 1`, function(error, results, fields){ + console.log(results); + }); + } + + //두번째 배너 + const walk = results[0].walk; + feature[5] = "walk"; + label[5] = walk; + + const chronic = results[0].chronic; + feature[6] = "chronic"; + label[6] = chronic; + + const breathe = results[0].breathe; + feature[7] = "breathe"; + label[7] = breathe; + + const surprised = results[0].surprised; + feature[8] = "surprised"; + label[8] = surprised; + + const people = results[0].people; + feature[9] = "people"; + label[9] = people; + + const diet = results[0].diet; + feature[10] = "diet"; + label[10] = diet; + + console.log("feature: "+feature); + console.log("label: "+label); + + cnt = 0; + const final2 = new Array(11); + for (let i = 5; i < 11; i++) { + if(label [i] == 1){ + final2[cnt] = feature[i]; + cnt = cnt+1; + } + } + + console.log("cnt pt2: "+cnt); + + if(cnt == 0){ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + }else if(cnt == 1){ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter WHERE ${final2[0]} = 1`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + }else if (cnt == 2){ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter WHERE ${final2[0]} = 1 OR ${final2[1]} = 1`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + }else if (cnt == 3){ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter WHERE ${final2[0]} = 1 OR ${final2[1]} = 1 OR ${final2[2]} = 1`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + }else if (cnt == 4){ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter WHERE ${final2[0]} = 1 OR ${final2[1]} = 1 OR ${final2[2]} = 1 OR ${final2[3]} = 1`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + }else if (cnt == 5){ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter WHERE ${final2[0]} = 1 OR ${final2[1]} = 1 OR ${final2[2]} = 1 OR ${final2[3]} = 1 OR ${final2[4]} = 1`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + }else{ + db.query(`SELECT name, description, type, location, platform, price FROM ${user}filter WHERE ${final2[0]} = 1 OR ${final2[1]} = 1 OR ${final2[2]} = 1 OR ${final2[3]} = 1 OR ${final2[4]} = 1 OR ${final2[5]} = 1`, function(error, results, fields){ + console.log(results); + res.send(JSON.parse(JSON.stringify(results))); + }); + } + }); + } + //데모용 + // const user = req.body.login_id; + // db.query('SELECT * FROM user WHERE login_id =?', [user] , function(error, results, fields) { + // if (error) { + // console.log("message: cannot get info from SQL"); + // throw error; + // } + // console.log(results); + + // const learn = results[0].learn; + // const travel = results[0].travel; + // const art = results[0].art; + // const sports = results[0].sports; + // const foods = results[0].foods; + + // const walk = results[0].learn; + // const chronic = results[0].chronic; + // const breathe = results[0].breathe; + // const surprised = results[0].surprised; + // const people = results[0].people; + // const diet = results[0].learn; + + // db.query('SELECT t.name, t.description, t.type, t.location, t.platform, t.price FROM (SELECT * FROM activities WHERE activities.learn = ? OR activities.travel = ?) t where t.surprised =?', [learn, travel,diet,surprised] , function(error, results, fields) { + // console.log(JSON.parse(JSON.stringify(results))); + // console.log("success!!"); + // res.send(JSON.parse(JSON.stringify(results))); + // }); + // }); +}); + +//액티비티 상세 화면 +router.post('/detail', (req, res) => { + const name = req.body.name; //엑티비티 이름 + db.query('SELECT name, description, location, platform, price FROM activities WHERE name = ?', [name], function(error, results, fields) { + if (error) { + console.log("message: cannot get info from SQL"); + throw error; + } + console.log(JSON.parse(JSON.stringify(results[0]))); + console.log("success!!"); + res.send(JSON.parse(JSON.stringify(results[0]))); + }); +}); + +module.exports = router; \ No newline at end of file diff --git a/server/alter.js b/server/alter.js new file mode 100644 index 0000000..d54c73d --- /dev/null +++ b/server/alter.js @@ -0,0 +1,50 @@ +const express = require('express'); +const cookieParser = require('cookie-parser'); +const mysql = require('mysql'); +const router = express.Router(); +const cors = require('cors'); + +require('dotenv').config(); + +var db =mysql.createConnection({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE +}); + +router.use(cors()); +router.use(cookieParser()); +router.use(express.json()) +router.use(express.urlencoded()) + + + + +router.post('/changing', (req, res) => { + const body = req.body; + const query_id = body.id; + const query_col = body.column; + + if (body!=undefined){ //아이디랑 PW 입력이 모두 있을때 + db.query(`SELECT ${query_col} FROM user WHERE login_id = '${query_id}'`, function(error, results, fields) { // DB에 같은 이름의 회원아이디가 있는지 확인 + const YorN = (JSON.parse(JSON.stringify(results[0]))[query_col]?0:1) + console.log(JSON.parse(JSON.stringify(results[0]))[query_col]) + if (results !=undefined ) { // signp err case 1: DB에 같은 이름의 회원아이디가 없고, 비밀번호가 올바르게 입력된 경우 + db.query(`UPDATE user SET ${query_col} = ${YorN} WHERE login_id= '${query_id}'`, function (err, data) { + db.query(`SELECT ${query_col} FROM user WHERE login_id = '${query_id}'`, function (errors, result) { + res.send(JSON.parse(JSON.stringify(result[0]))) + console.log(JSON.parse(JSON.stringify(result[0]))) + }); + }); + } else { // sigUp err case 2: DB에 같은 이름의 회원아이디가 있는 경우 + throw signUpErrorIdExist; + } + }); + }else { + throw no_input; +} +}) + +module.exports = router; \ No newline at end of file diff --git a/server/index.js b/server/index.js index f51709b..bf3caef 100644 --- a/server/index.js +++ b/server/index.js @@ -1,10 +1,16 @@ const express = require('express') const loginRouter = require('./login.js'); +const reservationRouter = require('./reservation.js'); +const activityRouter = require('./activity.js'); +const alterRouter = require('./alter.js'); const app = express(); app.use(express.json()) app.use("/login", loginRouter) +app.use("/reservation", reservationRouter); +app.use("/activity", activityRouter); +app.use("/alter", alterRouter); app.get("", (req, res) => { res.send("Hello Express!"); diff --git a/server/login.js b/server/login.js index 4c07618..6fc9edc 100644 --- a/server/login.js +++ b/server/login.js @@ -30,21 +30,16 @@ router.post('/signin', (req, res) => { if(query_id && query_pw){ //비밀번호가 입력된다면 db.query('SELECT * FROM user WHERE login_id = ? AND login_pw = ?', [query_id, query_pw], (err, result)=>{ - if (err) throw err; + if (err) throw new Error('someError'); if (result.length > 0) { console.log(JSON.parse(JSON.stringify(result))) res.send(JSON.parse(JSON.stringify(result))[0]) } - // else{ - // throw err; - // } + else{ + throw new Error('someError'); + } }) - } - // else { //login err case 2 - // //로그린 PW,ID 입력이 아예 없고 로그인을 눌렀을 때 - // throw err; - // } }); //회원가입 프로세스 @@ -56,19 +51,17 @@ router.post('/signup', (req, res) => { if (query_id && query_pw){ //아이디랑 PW 입력이 모두 있을때 db.query('SELECT * FROM user WHERE login_id = ?', [query_id], function(error, results, fields) { // DB에 같은 이름의 회원아이디가 있는지 확인 - if (error) throw error; - if (results.length <= 0) { // signp err case 1: DB에 같은 이름의 회원아이디가 없고, 비밀번호가 올바르게 입력된 경우 + if (error) throw new Error('something') + if (results.length <= 0) { db.query('INSERT INTO user (login_id, login_pw, name) VALUES(?,?,?)', [query_id, query_pw, query_name], function (error, data) { - if (error) throw error; + if (error) throw new Error('something') console.log(body) }); - } else { // sigUp err case 2: DB에 같은 이름의 회원아이디가 있는 경우 - throw signUpErrorIdExist; + } else { + throw new Error('이미 존재하는 id') } }); - }else { - throw no_input; -} + } }) module.exports = router; \ No newline at end of file diff --git a/server/reservation.js b/server/reservation.js new file mode 100644 index 0000000..2d15a7b --- /dev/null +++ b/server/reservation.js @@ -0,0 +1,58 @@ +const express = require('express'); +const cookieParser = require('cookie-parser'); +const mysql = require('mysql'); +const router = express.Router(); +const cors = require('cors'); + +require('dotenv').config(); + +var db =mysql.createConnection({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE +}); + +router.use(cors()); +router.use(cookieParser()); +router.use(express.urlencoded({ extended: true })); +router.use(express.json()); + + + +//예약자 정보 db에 저장 +router.put('/insert', (req, res) => { + const name = req.body.name; //예약자 이름 + const activity = req.body.activity; //활동명 + const people = req.body.people; //인원수 + const startDate = req.body.startDate; //시작일 + const endDate = req.body.endDate; //종료일 + + db.query('INSERT INTO reservation (name, activity, people, startDate, endDate) VALUES(?,?,?,?,?)', [name, activity, people, startDate, endDate], function (error, data) { + if (error) { + console.log("message: cannot insert info to SQL"); + throw error; + } + console.log("information insertion success"); + }); + + +}); + +//회원가입 프로세스 +router.post('/info', (req, res) => { + const name = req.body.name; //예약자 이름 + + db.query('SELECT * FROM reservation WHERE name = ?', [name], function(error, results, fields) { + if (error) { + console.log("message: cannot get info from SQL"); + throw error; + } + console.log(JSON.parse(JSON.stringify(results))); + res.send(JSON.parse(JSON.stringify(results))); + }); + +}) + +module.exports = router; \ No newline at end of file diff --git a/server/reservationConfirm.js b/server/reservationConfirm.js deleted file mode 100644 index 208e4ab..0000000 --- a/server/reservationConfirm.js +++ /dev/null @@ -1,56 +0,0 @@ -const express = require('express'); -const cookieParser = require('cookie-parser'); -const mysql = require('mysql'); -const cors = require('cors'); - -require('dotenv').config(); - -var db =mysql.createConnection({ - host: process.env.MYSQL_HOST, - port: process.env.MYSQL_PORT, - user: process.env.MYSQL_USER, - password: process.env.MYSQL_PASSWORD, - database: process.env.MYSQL_DATABASE -}); - -const app = express(); -app.use(cors()); -app.use(cookieParser()); -app.use(express.json()) -app.use(express.urlencoded()) - - -app.get('/', (req, res) => { //예약자 정보 저장 - const id = req.id; - const activity = body.activity; - const info = body.info; - const number = body.number; - const startDate = body.startDate; - const endDate = body.endDate; - const timestamp = "" - - - db.query('INSERT INTO reservation (username, password) VALUES(?,?,?,?,?)', [id, activity, info, number, startDate, endDate], function (error, data) { - if (error) { - console.log("message: cannot get info from SQL"); - throw error2; - } - //insertion 성공한 경우 - }); - - - -}) - -app.get('/', (req, res) => { //예약자 정보 꺼내기 - const id = req.id; - const activity = body.activity; - const info = body.info; - const number = body.number; - const startDate = body.startDate; - const endDate = body.endDate; - - db.query('SELECT * FROM reservation WHERE username = ? AND password = ?', [username, password], function(error, results, fields) { - - }); -}) \ No newline at end of file