RESTAPI_SERVER/routes/users.js

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;