diff --git a/app.js b/app.js index 1d39f3f5a89f600d58789ada5d990abbc01347e0..eb4b14f6725b458d4efb58b876f12a8fd741fe1f 100644 --- a/app.js +++ b/app.js @@ -34,15 +34,18 @@ const User = require('./models/user'); const Trip = require('./models/trips'); //Favorite define const Favorite = require('./models/favorite'); +//사용자 관리 라우트 +const userManagementRoutes = require('./route/userManagement'); // 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); +//사용자 관리 라우트 +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); diff --git a/controllers/userManagementController.js b/controllers/userManagementController.js new file mode 100644 index 0000000000000000000000000000000000000000..02ab8374ec6f9eefb69e31ab5cbdf200c7c63982 --- /dev/null +++ b/controllers/userManagementController.js @@ -0,0 +1,97 @@ +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: '서버 오류가 발생했습니다.' }); + } +}; + + +module.exports = router; \ No newline at end of file diff --git a/route/conf_name.js b/route/conf_name.js deleted file mode 100644 index 06c88e00fbfb8003d6557c9017d4a41d0cf4b806..0000000000000000000000000000000000000000 --- a/route/conf_name.js +++ /dev/null @@ -1,36 +0,0 @@ -const express = require('express'); -const User = require('../models/user'); -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 파일 경로 설정 -}); - -//사용자 이름 변경(닉네임) -router.post('/change', 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: '서버 오류가 발생했습니다.'}); - } -}); - -module.exports = router; \ No newline at end of file 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..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391