삭제를 alert에서 modal로 변경

This commit is contained in:
dohyeons
2025-11-03 17:28:12 +09:00
parent 0d6b018ec4
commit 6b53cb414c
6 changed files with 380 additions and 41 deletions

View File

@@ -114,6 +114,22 @@ export async function createDepartment(req: AuthenticatedRequest, res: Response)
return;
}
// 같은 회사 내 중복 부서명 확인
const duplicate = await queryOne<any>(`
SELECT dept_code, dept_name
FROM dept_info
WHERE company_code = $1 AND dept_name = $2
`, [companyCode, dept_name.trim()]);
if (duplicate) {
res.status(409).json({
success: false,
message: `"${dept_name}" 부서가 이미 존재합니다.`,
isDuplicate: true,
});
return;
}
// 회사 이름 조회
const company = await queryOne<any>(`
SELECT company_name FROM company_mng WHERE company_code = $1
@@ -322,6 +338,53 @@ export async function getDepartmentMembers(req: AuthenticatedRequest, res: Respo
}
}
/**
* 사용자 검색 (부서원 추가용)
*/
export async function searchUsers(req: AuthenticatedRequest, res: Response): Promise<void> {
try {
const { companyCode } = req.params;
const { search } = req.query;
if (!search || typeof search !== 'string') {
res.status(400).json({
success: false,
message: "검색어를 입력해주세요.",
});
return;
}
// 사용자 검색 (ID 또는 이름)
const users = await query<any>(`
SELECT
user_id,
user_name,
email,
position_name,
company_code
FROM user_info
WHERE company_code = $1
AND (
user_id ILIKE $2 OR
user_name ILIKE $2
)
ORDER BY user_name
LIMIT 20
`, [companyCode, `%${search}%`]);
res.status(200).json({
success: true,
data: users,
});
} catch (error) {
logger.error("사용자 검색 실패", error);
res.status(500).json({
success: false,
message: "사용자 검색 중 오류가 발생했습니다.",
});
}
}
/**
* 부서원 추가
*/
@@ -361,9 +424,10 @@ export async function addDepartmentMember(req: AuthenticatedRequest, res: Respon
`, [user_id, deptCode]);
if (existing) {
res.status(400).json({
res.status(409).json({
success: false,
message: "이미 해당 부서의 부서원입니다.",
isDuplicate: true,
});
return;
}

View File

@@ -30,6 +30,9 @@ router.delete("/:deptCode", departmentController.deleteDepartment);
// 부서원 목록 조회
router.get("/:deptCode/members", departmentController.getDepartmentMembers);
// 사용자 검색 (부서원 추가용)
router.get("/companies/:companyCode/users/search", departmentController.searchUsers);
// 부서원 추가
router.post("/:deptCode/members", departmentController.addDepartmentMember);