feat(purchase): 카테고리 테이블 분리 + 동적 로드 + tkuser 관리
- DB: consumable_categories 테이블 생성, ENUM→VARCHAR 변환, 시드 4개 - API: GET/POST/PUT/DEACTIVATE /api/consumable-categories - 프론트: 3개 JS 하드코딩 CAT_LABELS 제거 → API loadCategories() 동적 로드 - tkuser: 카테고리 관리 섹션 추가, select 옵션 동적 생성 - 별칭 시드 SQL (INSERT IGNORE 기반) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
const ConsumableCategoryModel = require('../models/consumableCategoryModel');
|
||||
const logger = require('../utils/logger');
|
||||
|
||||
const ConsumableCategoryController = {
|
||||
getAll: async (req, res) => {
|
||||
try {
|
||||
const activeOnly = req.query.all !== '1';
|
||||
const rows = await ConsumableCategoryModel.getAll(activeOnly);
|
||||
res.json({ success: true, data: rows });
|
||||
} catch (err) {
|
||||
logger.error('ConsumableCategory getAll error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
create: async (req, res) => {
|
||||
try {
|
||||
const { category_code, category_name, icon, color_bg, color_fg, sort_order } = req.body;
|
||||
if (!category_code || !category_name) {
|
||||
return res.status(400).json({ success: false, message: '코드와 이름을 입력해주세요.' });
|
||||
}
|
||||
const cat = await ConsumableCategoryModel.create({
|
||||
categoryCode: category_code, categoryName: category_name,
|
||||
icon, colorBg: color_bg, colorFg: color_fg, sortOrder: sort_order
|
||||
});
|
||||
res.status(201).json({ success: true, data: cat, message: '카테고리가 추가되었습니다.' });
|
||||
} catch (err) {
|
||||
if (err.code === 'ER_DUP_ENTRY') {
|
||||
return res.status(400).json({ success: false, message: '이미 존재하는 코드입니다.' });
|
||||
}
|
||||
logger.error('ConsumableCategory create error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
update: async (req, res) => {
|
||||
try {
|
||||
const { category_name, icon, color_bg, color_fg, sort_order } = req.body;
|
||||
const cat = await ConsumableCategoryModel.update(req.params.id, {
|
||||
categoryName: category_name, icon, colorBg: color_bg, colorFg: color_fg, sortOrder: sort_order
|
||||
});
|
||||
if (!cat) return res.status(404).json({ success: false, message: '카테고리를 찾을 수 없습니다.' });
|
||||
res.json({ success: true, data: cat, message: '카테고리가 수정되었습니다.' });
|
||||
} catch (err) {
|
||||
logger.error('ConsumableCategory update error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
deactivate: async (req, res) => {
|
||||
try {
|
||||
const cat = await ConsumableCategoryModel.deactivate(req.params.id);
|
||||
if (!cat) return res.status(404).json({ success: false, message: '카테고리를 찾을 수 없습니다.' });
|
||||
res.json({ success: true, data: cat, message: '카테고리가 비활성화되었습니다.' });
|
||||
} catch (err) {
|
||||
logger.error('ConsumableCategory deactivate error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = ConsumableCategoryController;
|
||||
Reference in New Issue
Block a user