diff --git a/app.js b/app.js index b07c969238cd847c234bac5b05b33a6138ec6a78..f5c9b2e1454fa5ab77e7607d95bf1ffad3f6429a 100644 --- a/app.js +++ b/app.js @@ -21,12 +21,12 @@ app.use(cors({ credentials: true, })); //비밀번호 변경 라우트 등록 -const passwordRoutes = require('./route/conf_password'); -//닉네임 변경 라우트 등록 -const confNameRoutes = require('./route/conf_name.js'); -//회원 탈퇴 라우트 등록 -const deleteUser = require('./route/del_user'); -//비밀번호 암호화용 모듈 +// const passwordRoutes = require('./route/conf_password'); +// //닉네임 변경 라우트 등록 +// const confNameRoutes = require('./route/conf_name.js'); +// //회원 탈퇴 라우트 등록 +// const deleteUser = require('./route/del_user'); +// //비밀번호 암호화용 모듈 const bcrypt = require('bcrypt'); //User define const User = require('./models/user'); @@ -34,15 +34,18 @@ const User = require('./models/user'); const Trip = require('./models/trips'); //Favorite define const Favorite = require('./models/favorite'); + // JSON 요청 본문을 파싱하는 미들웨어 추가 app.use(express.json()); //비밀번호 변경 라우트 추가 -app.use('/conf_password',passwordRoutes); -//이름 변경 라우트 -app.use('/conf_name', confNameRoutes); -//회원 탈퇴 라우트 -app.use('/del_user', deleteUser); - +// app.use('/conf_password',passwordRoutes); +// //이름 변경 라우트 +// app.use('/conf_name', confNameRoutes); +// //회원 탈퇴 라우트 +// app.use('/del_user', deleteUser); +//사용자 관리 라우트 +const userManagementRoutes = require('./route/userManagement'); +app.use('/userManagement', userManagementRoutes); //여행 라우트 const tripRoutes = require('./route/tripRoute'); // 라우트 파일 경로 // Routes @@ -59,9 +62,11 @@ app.use('/favorites', favoriteRoutes); const authenticateToken = require('./middleware/authMiddleware.js'); // 보호된 라우트에 미들웨어 적용 -app.use('/conf_password', authenticateToken, passwordRoutes); -app.use('/conf_name', authenticateToken, confNameRoutes); -app.use('/del_user', authenticateToken, deleteUser); +// app.use('/conf_password', authenticateToken, passwordRoutes); +// app.use('/conf_name', authenticateToken, confNameRoutes); +// app.use('/del_user', authenticateToken, deleteUser); + +app.use('/userManagement', authenticateToken, userManagementRoutes); //확인 console.log('GOOGLE_CLIENT_ID:', process.env.GOOGLE_CLIENT_ID); @@ -186,10 +191,7 @@ app.get('/dashboard', authenticateToken, (req, res) => { // `); // }); -//signup 경로 -app.get('/signup', (req, res) => { - res.sendFile(__dirname + '/public/signup.html'); // login.html 파일 경로 설정 -}); + //session // app.get('/conf_password', (req, res) => { diff --git a/controllers/userManagementController.js b/controllers/userManagementController.js new file mode 100644 index 0000000000000000000000000000000000000000..20793d08fc0cc85a80829474a07e282540e24929 --- /dev/null +++ b/controllers/userManagementController.js @@ -0,0 +1,96 @@ +const express = require('express'); +const User = require('../models/user'); +const Trip = require('../models/trips'); +const Review = require('../models/review'); +const bcrypt = require('bcrypt'); +const path = require('path'); // 경로 처리 모듈 추가 + +const router = express.Router(); + +// router.get('/change', (req, res) => { + +// // 닉네임 변경 HTML 파일 반환 +// res.sendFile(path.join(__dirname, '../public/conf_name.html')); // HTML 파일 경로 설정 +// }); + +//사용자 이름 변경(닉네임) +exports.changeName = async (req, res) => { + const { name, newName } = req.body; + + const user = await User.findOne({ name }); + + try { + if (!name || !newName) { + return res.status(400).json({message: '유효하지 않은 요청입니다.'}); + } + + + user.name = newName; + await user.save(); + + res.status(200).json({ message: ' 이름이 성공적으로 변경되었습니다.', user}); + console.log('이름 변경 완료', user); + } catch(error) { + console.error('이름 변경 오류', error); + res.status(500).json({ message: '서버 오류가 발생했습니다.'}); + } +}; + + +// 비밀번호 변경 +exports.changePassword = async (req, res) => { + const { email, oldPassword, newPassword } = req.body; + + try { + const user = await User.findOne({ email }); + if (!user || !user.password) { + return res.status(400).json({ message: '사용자를 찾을 수 없거나 잘못된 요청입니다.' }); + } + + const isMatch = await bcrypt.compare(oldPassword, user.password); + if (!isMatch) { + return res.status(400).json({ message: '기존 비밀번호가 일치하지 않습니다.' }); + } + + const hashedPassword = await bcrypt.hash(newPassword, 10); + user.password = hashedPassword; + + await user.save(); + res.status(200).json({ message: '비밀번호가 성공적으로 변경되었습니다.' }); + console.log('비밀번호 변경 완료',user); + } catch (error) { + console.error('비밀번호 변경 오류:', error); + res.status(500).json({ message: '서버 오류가 발생했습니다.' }); + } +}; + +// 사용자 삭제 +exports.deleteUser = async (req, res) => { + const { userId } = req.params; + + try { + // 사용자 삭제 + const user = await User.findByIdAndDelete(userId); + if (!user) { + return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' }); + } + + // 사용자가 생성한 여행 데이터 삭제 또는 상태 변경 + await Trip.deleteMany({ create_by: userId }); + //사용자가 작성한 리뷰 제거 + await Review.deleteMany({ create_by: userId}); + + // 사용자가 공동 작업자로 포함된 경우 업데이트 + await Trip.updateMany( + { collaborators: userId }, //필터링 - 지우려는 유저 아이디가 공동 작업자로 포함된경우 + { $pull: { collaborators: userId } } // 공동 작업자 목록에서 제거 + ); + console.log('이 사용자를 삭제합니다: ',user); + res.status(200).json({ message: '사용자가 성공적으로 삭제되었습니다.' }); + } catch (error) { + console.error('사용자 삭제 오류:', error); + res.status(500).json({ message: '서버 오류가 발생했습니다.' }); + } +}; + + diff --git a/models/trips.js b/models/trips.js index 0cc86fdd0d0a90a4c8fb0f3ecdab0e6d2faf0a25..3d8b1841b5ee659c25c41a1ef0cb8a7e5e84b62b 100644 --- a/models/trips.js +++ b/models/trips.js @@ -61,9 +61,10 @@ tripSchema.pre('save', function (next) { const start = new Date(trip.start_date); const end = new Date(trip.end_date); - // 기존 `plans` 데이터를 유지 - const plans = trip.plans || new Map(); - + // // 기존 `plans` 데이터를 유지 + // const plans = trip.plans || new Map(); + // plans가 없는 경우 초기화 + const plans = trip.plans instanceof Map ? trip.plans : new Map(Object.entries(trip.plans || {})); let currentDay = 1; // 새 day만 추가 diff --git a/route/conf_password.js b/route/conf_password.js deleted file mode 100644 index 9d91354138cb869d43b583c0124f69f7c8414948..0000000000000000000000000000000000000000 --- a/route/conf_password.js +++ /dev/null @@ -1,40 +0,0 @@ -const express = require('express'); -const bcrypt = require('bcrypt'); -const User = require('../models/user'); // User 모델 가져오기 -const path = require('path'); // 경로 처리 모듈 추가 - -const router = express.Router(); - -router.get('/change', (req, res) => { - - // 비밀번호 변경 HTML 파일 반환 - res.sendFile(path.join(__dirname, '../public/conf_password.html')); // HTML 파일 경로 설정 -}); -// 비밀번호 변경 로직 -router.post('/change', async (req, res) => { - const { email, oldPassword, newPassword } = req.body; - - try { - const user = await User.findOne({ email }); - if (!user || !user.password) { - return res.status(400).json({ message: '사용자를 찾을 수 없거나 잘못된 요청입니다.' }); - } - - const isMatch = await bcrypt.compare(oldPassword, user.password); - if (!isMatch) { - return res.status(400).json({ message: '기존 비밀번호가 일치하지 않습니다.' }); - } - - const hashedPassword = await bcrypt.hash(newPassword, 10); - user.password = hashedPassword; - - await user.save(); - res.status(200).json({ message: '비밀번호가 성공적으로 변경되었습니다.' }); - console.log('비밀번호 변경 완료',user); - } catch (error) { - console.error('비밀번호 변경 오류:', error); - res.status(500).json({ message: '서버 오류가 발생했습니다.' }); - } -}); - -module.exports = router; diff --git a/route/del_user.js b/route/del_user.js deleted file mode 100644 index 27dad7aa4a53b24c912f25ef914a4baae34ab2b5..0000000000000000000000000000000000000000 --- a/route/del_user.js +++ /dev/null @@ -1,38 +0,0 @@ -const express = require('express'); -const User = require('../models/user'); -const Trip = require('../models/trips'); -const Review = require('../models/review'); - -const router = express.Router(); - -// 사용자 삭제 -router.delete('/:userId', async (req, res) => { - const { userId } = req.params; - - try { - // 사용자 삭제 - const user = await User.findByIdAndDelete(userId); - if (!user) { - return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' }); - } - - // 사용자가 생성한 여행 데이터 삭제 또는 상태 변경 - await Trip.deleteMany({ create_by: userId }); - //사용자가 작성한 리뷰 제거 - //사용자가 삭제되면 삭제되나..? - await Review.deleteMany({ create_by: userId}); - - // 사용자가 공동 작업자로 포함된 경우 업데이트 - await Trip.updateMany( - { collaborators: userId }, //필터링 - 지우려는 유저 아이디가 공동 작업자로 포함된경우 - { $pull: { collaborators: userId } } // 공동 작업자 목록에서 제거 - ); - console.log('이 사용자를 삭제합니다: ',user); - res.status(200).json({ message: '사용자가 성공적으로 삭제되었습니다.' }); - } catch (error) { - console.error('사용자 삭제 오류:', error); - res.status(500).json({ message: '서버 오류가 발생했습니다.' }); - } -}); - -module.exports = router; diff --git a/route/userManagement.js b/route/userManagement.js new file mode 100644 index 0000000000000000000000000000000000000000..5695f907b72df37b1a0acb0b3a3e4368ecbc8234 --- /dev/null +++ b/route/userManagement.js @@ -0,0 +1,11 @@ +const express = require('express'); +const router = express.Router(); +const User = require('../models/user'); // User 스키마 참조 + +const userManagementController = require('../controllers/userManagementController'); + +router.post('/change', userManagementController.changeName); +router.post('/changePassword', userManagementController.changePassword); +router.delete('/:userId', userManagementController.deleteUser); + +module.exports = router;