166 lines
4.0 KiB
JavaScript
166 lines
4.0 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const {
|
|
getAllUsers,
|
|
getUserById,
|
|
createUser,
|
|
updateUser,
|
|
deleteUser
|
|
} = require('../database/user-queries');
|
|
const { verifyApiKey, optionalAuth, requirePermission } = require('../middleware/auth');
|
|
|
|
// 모든 사용자 조회 (API 키 + 읽기 권한 필요)
|
|
router.get('/', verifyApiKey, requirePermission('read'), async (req, res) => {
|
|
try {
|
|
const users = await getAllUsers();
|
|
res.json({
|
|
success: true,
|
|
message: '사용자 목록 조회 성공',
|
|
data: users
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '사용자 목록 조회 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 특정 사용자 조회 (API 키 + 읽기 권한 필요)
|
|
router.get('/:userId', verifyApiKey, requirePermission('read'), async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const user = await getUserById(userId);
|
|
|
|
if (!user) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '사용자를 찾을 수 없습니다'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: '사용자 조회 성공',
|
|
data: user
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '사용자 조회 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 사용자 생성 (API 키 + 쓰기 권한 필요)
|
|
router.post('/', verifyApiKey, requirePermission('write'), async (req, res) => {
|
|
try {
|
|
const { USER_ID, USER_NAME, DEPT_CODE } = req.body;
|
|
|
|
if (!USER_ID || !USER_NAME) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'USER_ID와 USER_NAME은 필수입니다'
|
|
});
|
|
}
|
|
|
|
const result = await createUser({
|
|
USER_ID,
|
|
USER_NAME,
|
|
DEPT_CODE
|
|
});
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
message: '사용자가 성공적으로 생성되었습니다',
|
|
rowsAffected: result
|
|
});
|
|
} catch (error) {
|
|
console.error('사용자 생성 오류:', error);
|
|
|
|
if (error.message.includes('ORA-00001')) {
|
|
return res.status(409).json({
|
|
success: false,
|
|
message: '이미 존재하는 사용자 ID입니다'
|
|
});
|
|
}
|
|
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '사용자 생성 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 사용자 정보 수정
|
|
// 사용자 정보 업데이트 (API 키 + 쓰기 권한 필요)
|
|
router.put('/:userId', verifyApiKey, requirePermission('write'), async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const { USER_NAME, DEPT_CODE } = req.body;
|
|
|
|
if (!USER_NAME) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'USER_NAME은 필수입니다'
|
|
});
|
|
}
|
|
|
|
const result = await updateUser(userId, {
|
|
USER_NAME,
|
|
DEPT_CODE
|
|
});
|
|
|
|
if (result === 0) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '수정할 사용자를 찾을 수 없습니다'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: '사용자 정보가 성공적으로 수정되었습니다',
|
|
rowsAffected: result
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '사용자 정보 수정 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 사용자 삭제 (API 키 + 삭제 권한 필요)
|
|
router.delete('/:userId', verifyApiKey, requirePermission('delete'), async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const result = await deleteUser(userId);
|
|
|
|
if (result === 0) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '삭제할 사용자를 찾을 수 없습니다'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: '사용자가 성공적으로 삭제되었습니다',
|
|
rowsAffected: result
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '사용자 삭제 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|