- 4단계 상태 플로우: pending → grouped → purchased → received - 한국어 스마트 검색: 초성 매칭(ㅁㅈㄱ→면장갑), 별칭 테이블, 인메모리 캐시 - 모바일 전용 신청 페이지: 바텀시트 UI, FAB, 카드 리스트, 스크롤 페이지네이션 - 인라인 품목 등록: 미등록 품목 검색→등록→신청 단일 트랜잭션 - 관리자 그룹화: 체크박스 다중 선택, 구매 그룹(batch) 생성/일괄 구매/입고 - 입고 처리: 사진+보관위치 등록, 부분 입고 허용, batch 자동 상태 전환 - 알림: notifyHelper에 target_user_ids 추가, 구매진행중/입고완료 시 신청자 ntfy+push Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
const ItemAliasModel = require('../models/itemAliasModel');
|
|
const koreanSearch = require('../utils/koreanSearch');
|
|
const logger = require('../utils/logger');
|
|
|
|
const ItemAliasController = {
|
|
getAll: async (req, res) => {
|
|
try {
|
|
const rows = await ItemAliasModel.getAll();
|
|
res.json({ success: true, data: rows });
|
|
} catch (err) {
|
|
logger.error('ItemAlias getAll error:', err);
|
|
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
|
}
|
|
},
|
|
|
|
create: async (req, res) => {
|
|
try {
|
|
const { item_id, alias_name } = req.body;
|
|
if (!item_id || !alias_name || !alias_name.trim()) {
|
|
return res.status(400).json({ success: false, message: '품목 ID와 별칭을 입력해주세요.' });
|
|
}
|
|
const id = await ItemAliasModel.create(item_id, alias_name);
|
|
koreanSearch.clearCache();
|
|
res.status(201).json({ success: true, data: { alias_id: id }, message: '별칭이 등록되었습니다.' });
|
|
} catch (err) {
|
|
if (err.code === 'ER_DUP_ENTRY') {
|
|
return res.status(400).json({ success: false, message: '이미 등록된 별칭입니다.' });
|
|
}
|
|
logger.error('ItemAlias create error:', err);
|
|
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
|
}
|
|
},
|
|
|
|
delete: async (req, res) => {
|
|
try {
|
|
const deleted = await ItemAliasModel.delete(req.params.id);
|
|
if (!deleted) return res.status(404).json({ success: false, message: '별칭을 찾을 수 없습니다.' });
|
|
koreanSearch.clearCache();
|
|
res.json({ success: true, message: '별칭이 삭제되었습니다.' });
|
|
} catch (err) {
|
|
logger.error('ItemAlias delete error:', err);
|
|
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = ItemAliasController;
|