Files
bowlingManager/backend/controllers/userController.js
T
2025-04-17 23:32:39 +09:00

92 lines
2.6 KiB
JavaScript

const User = require('../models/User');
/**
* 전체 사용자 목록 조회
*/
const getAllUsers = async (req, res) => {
try {
const users = await User.findAll({
attributes: {
exclude: ['password']
},
order: [['createdAt', 'DESC']]
});
res.json(users);
} catch (error) {
console.error('사용자 목록 조회 중 오류 발생:', error);
res.status(500).json({ message: '사용자 목록을 가져오는 중 오류가 발생했습니다.' });
}
};
/**
* 단일 사용자 정보 조회
*/
const getUser = async (req, res) => {
try {
const userId = req.params.id;
const user = await User.findByPk(userId, {
attributes: { exclude: ['password'] }
});
if (!user) {
return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
}
res.json(user);
} catch (error) {
console.error('사용자 정보 조회 중 오류 발생:', error);
res.status(500).json({ message: '사용자 정보를 가져오는 중 오류가 발생했습니다.' });
}
};
/**
* 사용자 정보 수정
*/
const updateUser = async (req, res) => {
try {
const userId = req.params.id;
const { name, email, role, status } = req.body;
const user = await User.findByPk(userId);
if (!user) {
return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
}
// 이메일 중복 확인 (이메일이 변경된 경우에만)
if (email !== user.email) {
const existingUser = await User.findOne({ where: { email } });
if (existingUser) {
return res.status(400).json({ message: '이미 사용 중인 이메일입니다.' });
}
}
// 필수 필드 확인
if (!name || !email || !role || !status) {
return res.status(400).json({ message: '필수 정보가 누락되었습니다.' });
}
await user.update({
name,
email,
role,
status,
updatedAt: new Date()
});
const updatedUser = await User.findByPk(userId, {
attributes: { exclude: ['password'] }
});
res.json(updatedUser);
} catch (error) {
console.error('사용자 정보 수정 중 오류 발생:', error);
res.status(500).json({ message: '사용자 정보를 수정하는 중 오류가 발생했습니다.' });
}
};
module.exports = {
getAllUsers,
getUser,
updateUser
};