166 lines
3.7 KiB
JavaScript
166 lines
3.7 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const {
|
|
getAllData,
|
|
getDataById,
|
|
insertData,
|
|
updateData,
|
|
deleteData
|
|
} = require('../database/queries');
|
|
const { verifyApiKey, optionalAuth, requirePermission } = require('../middleware/auth');
|
|
|
|
// 모든 데이터 조회 (API 키 또는 JWT 토큰 필요)
|
|
router.get('/data', verifyApiKey, async (req, res) => {
|
|
try {
|
|
const data = await getAllData();
|
|
res.json({
|
|
success: true,
|
|
message: '데이터 조회 성공',
|
|
data: data
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '데이터 조회 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 특정 ID 데이터 조회 (API 키 또는 JWT 토큰 필요)
|
|
router.get('/data/:id', verifyApiKey, async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const data = await getDataById(id);
|
|
|
|
if (!data) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: '데이터를 찾을 수 없습니다'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: '데이터 조회 성공',
|
|
data: data
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '데이터 조회 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 데이터 생성 (API 키 또는 JWT 토큰 필요)
|
|
router.post('/data', verifyApiKey, async (req, res) => {
|
|
try {
|
|
const { name, description, dataValue } = req.body;
|
|
|
|
if (!name) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'name 필드는 필수입니다'
|
|
});
|
|
}
|
|
|
|
const result = await insertData({
|
|
name,
|
|
description,
|
|
dataValue
|
|
});
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
message: '데이터 생성 성공',
|
|
rowsAffected: result
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
message: '데이터 생성 실패',
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// 데이터 업데이트 (API 키 또는 JWT 토큰 필요)
|
|
router.put('/data/:id', verifyApiKey, async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const { name, description, dataValue } = req.body;
|
|
|
|
if (!name) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'name 필드는 필수입니다'
|
|
});
|
|
}
|
|
|
|
const result = await updateData(id, {
|
|
name,
|
|
description,
|
|
dataValue
|
|
});
|
|
|
|
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 키 또는 JWT 토큰 필요)
|
|
router.delete('/data/:id', verifyApiKey, async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const result = await deleteData(id);
|
|
|
|
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
|
|
});
|
|
}
|
|
});
|
|
|
|
// 헬스 체크
|
|
router.get('/health', (req, res) => {
|
|
res.json({
|
|
success: true,
|
|
message: 'API 서버가 정상적으로 작동중입니다',
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|