feat: 안전 코드 tksafety 이관 + 사용자 관리 정리 + UI Tailwind 전환
Phase 1: tksafety에 출입신청/체크리스트 API·웹 추가, tkfb 안전 코드 삭제
Phase 2: 사용자 관리 페이지 삭제, API 축소, 알림 수신자 tkuser 이관
Phase 3: tkuser 권한 페이지 정의 업데이트
Phase 4: 전체 34개 페이지 Tailwind CSS + tkfb-core.js 전환,
미사용 CSS 20개·인프라 JS 10개·템플릿·컴포넌트 삭제
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
85
tksafety/api/controllers/checklistController.js
Normal file
85
tksafety/api/controllers/checklistController.js
Normal file
@@ -0,0 +1,85 @@
|
||||
const checklistModel = require('../models/checklistModel');
|
||||
|
||||
exports.getAllChecks = async (req, res) => {
|
||||
try {
|
||||
const checks = await checklistModel.getAllChecks();
|
||||
res.json({ success: true, data: checks });
|
||||
} catch (err) {
|
||||
console.error('체크리스트 조회 오류:', err);
|
||||
res.status(500).json({ success: false, error: '체크리스트 조회 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.getCheckById = async (req, res) => {
|
||||
try {
|
||||
const check = await checklistModel.getCheckById(req.params.id);
|
||||
if (!check) return res.status(404).json({ success: false, error: '항목을 찾을 수 없습니다' });
|
||||
res.json({ success: true, data: check });
|
||||
} catch (err) {
|
||||
console.error('체크리스트 항목 조회 오류:', err);
|
||||
res.status(500).json({ success: false, error: '조회 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.createCheck = async (req, res) => {
|
||||
try {
|
||||
if (!req.body.check_item) return res.status(400).json({ success: false, error: 'check_item은 필수입니다' });
|
||||
const checkId = await checklistModel.createCheck(req.body);
|
||||
res.status(201).json({ success: true, message: '항목이 추가되었습니다', data: { check_id: checkId } });
|
||||
} catch (err) {
|
||||
console.error('체크리스트 항목 추가 오류:', err);
|
||||
res.status(500).json({ success: false, error: '추가 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.updateCheck = async (req, res) => {
|
||||
try {
|
||||
const result = await checklistModel.updateCheck(req.params.id, req.body);
|
||||
if (result.affectedRows === 0) return res.status(404).json({ success: false, error: '항목을 찾을 수 없습니다' });
|
||||
res.json({ success: true, message: '항목이 수정되었습니다' });
|
||||
} catch (err) {
|
||||
console.error('체크리스트 항목 수정 오류:', err);
|
||||
res.status(500).json({ success: false, error: '수정 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.deleteCheck = async (req, res) => {
|
||||
try {
|
||||
const result = await checklistModel.deleteCheck(req.params.id);
|
||||
if (result.affectedRows === 0) return res.status(404).json({ success: false, error: '항목을 찾을 수 없습니다' });
|
||||
res.json({ success: true, message: '항목이 삭제되었습니다' });
|
||||
} catch (err) {
|
||||
console.error('체크리스트 항목 삭제 오류:', err);
|
||||
res.status(500).json({ success: false, error: '삭제 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.getWeatherConditions = async (req, res) => {
|
||||
try {
|
||||
const conditions = await checklistModel.getWeatherConditions();
|
||||
res.json({ success: true, data: conditions });
|
||||
} catch (err) {
|
||||
console.error('날씨 조건 조회 오류:', err);
|
||||
res.status(500).json({ success: false, error: '조회 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.getWorkTypes = async (req, res) => {
|
||||
try {
|
||||
const types = await checklistModel.getWorkTypes();
|
||||
res.json({ success: true, data: types });
|
||||
} catch (err) {
|
||||
console.error('공정 조회 오류:', err);
|
||||
res.status(500).json({ success: false, error: '조회 실패' });
|
||||
}
|
||||
};
|
||||
|
||||
exports.getTasksByWorkType = async (req, res) => {
|
||||
try {
|
||||
const tasks = await checklistModel.getTasksByWorkType(req.params.workTypeId);
|
||||
res.json({ success: true, data: tasks });
|
||||
} catch (err) {
|
||||
console.error('작업 목록 조회 오류:', err);
|
||||
res.status(500).json({ success: false, error: '조회 실패' });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user