Files
tk-factory-services/user-management/api/controllers/departmentController.js
Hyungi Ahn e236883c64 feat(tkuser): 부서 관리 개선 — 상위부서 제거, hard delete, 휴가 부서별 그룹
- 상위부서(parent_id) 필드 UI/API 전체 제거
- 부서 비활성화(soft delete) → 진짜 삭제(hard delete) 전환 (트랜잭션)
- 소속 인원 있는 부서 삭제 시 department_id=NULL 처리
- 편집 모달에서 활성/비활성 필드 제거
- 휴가 발생 입력 작업자 select를 부서별 optgroup으로 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 20:27:14 +09:00

67 lines
1.6 KiB
JavaScript

/**
* Department Controller
*
* 부서 CRUD
*/
const departmentModel = require('../models/departmentModel');
async function getAll(req, res, next) {
try {
const departments = await departmentModel.getAll();
res.json({ success: true, data: departments });
} catch (err) {
next(err);
}
}
async function getById(req, res, next) {
try {
const dept = await departmentModel.getById(parseInt(req.params.id));
if (!dept) {
return res.status(404).json({ success: false, error: '부서를 찾을 수 없습니다' });
}
res.json({ success: true, data: dept });
} catch (err) {
next(err);
}
}
async function create(req, res, next) {
try {
const { department_name } = req.body;
if (!department_name) {
return res.status(400).json({ success: false, error: '부서명은 필수입니다' });
}
const dept = await departmentModel.create(req.body);
res.status(201).json({ success: true, data: dept });
} catch (err) {
next(err);
}
}
async function update(req, res, next) {
try {
const id = parseInt(req.params.id);
const dept = await departmentModel.update(id, req.body);
if (!dept) {
return res.status(404).json({ success: false, error: '부서를 찾을 수 없습니다' });
}
res.json({ success: true, data: dept });
} catch (err) {
next(err);
}
}
async function remove(req, res, next) {
try {
const id = parseInt(req.params.id);
await departmentModel.remove(id);
res.json({ success: true, message: '부서가 삭제되었습니다' });
} catch (err) {
next(err);
}
}
module.exports = { getAll, getById, create, update, remove };