refactor: API 서버 구조 개선 및 표준화
- 통합 에러 처리 시스템 구축: * utils/errorHandler.js: ApiError 클래스 및 에러 미들웨어 * 데이터베이스, 유효성 검사, 권한 에러 표준화 * 비동기 함수 래퍼 (asyncHandler) 추가 - 응답 포맷터 시스템 구축: * utils/responseFormatter.js: 일관된 API 응답 형식 * 성공, 페이지네이션, 인증, 파일업로드 등 전용 포맷터 * Express 응답 확장 미들웨어 - 유효성 검사 시스템 구축: * utils/validator.js: 스키마 기반 유효성 검사 * 필수 필드, 타입, 길이, 형식 검사 함수들 * 일반적인 스키마 정의 (사용자, 프로젝트, 작업보고서 등) - 코드 정리 및 표준화: * 삭제된 테이블 참조 제거 (work_report_audit_log 등) * 대문자 테이블명을 소문자로 통일 (Users -> users) * authController.js에 새로운 유틸리티 적용 예시 - 미들웨어 통합: * index.js에 에러 핸들러 및 응답 포맷터 적용 * 헬스체크 엔드포인트 개선
This commit is contained in:
@@ -268,28 +268,8 @@ const removeSpecificEntry = async (entry_id, deleted_by, callback) => {
|
||||
// 개별 항목 삭제
|
||||
const [result] = await conn.query('DELETE FROM daily_work_reports WHERE id = ?', [entry_id]);
|
||||
|
||||
// 감사 로그
|
||||
try {
|
||||
await conn.query(
|
||||
`INSERT INTO work_report_audit_log
|
||||
(action, report_id, old_values, changed_by, change_reason, created_at)
|
||||
VALUES (?, ?, ?, ?, ?, NOW())`,
|
||||
[
|
||||
'DELETE_SINGLE',
|
||||
entry_id,
|
||||
JSON.stringify({
|
||||
worker_name: entry.worker_name,
|
||||
project_name: entry.project_name,
|
||||
work_hours: entry.work_hours,
|
||||
report_date: entry.report_date
|
||||
}),
|
||||
deleted_by,
|
||||
`개별 항목 삭제`
|
||||
]
|
||||
);
|
||||
} catch (auditErr) {
|
||||
console.warn('감사 로그 추가 실패:', auditErr.message);
|
||||
}
|
||||
// 감사 로그 (삭제된 테이블이므로 콘솔 로그로 대체)
|
||||
console.log(`[삭제 로그] 작업자: ${entry.worker_name}, 프로젝트: ${entry.project_name}, 작업시간: ${entry.work_hours}시간, 삭제자: ${deleted_by}`);
|
||||
|
||||
await conn.commit();
|
||||
callback(null, {
|
||||
@@ -968,17 +948,9 @@ const removeReportById = async (reportId, deletedByUserId) => {
|
||||
// 실제 삭제 작업
|
||||
const [result] = await conn.query('DELETE FROM daily_work_reports WHERE report_id = ?', [reportId]);
|
||||
|
||||
// 감사 로그 추가 (삭제된 항목이 있고, 삭제자가 명시된 경우)
|
||||
// 감사 로그 (삭제된 테이블이므로 콘솔 로그로 대체)
|
||||
if (reportInfo.length > 0 && deletedByUserId) {
|
||||
try {
|
||||
await conn.query(
|
||||
`INSERT INTO work_report_audit_log (action, report_id, old_values, changed_by, change_reason) VALUES (?, ?, ?, ?, ?)`,
|
||||
['DELETE', reportId, JSON.stringify(reportInfo[0]), deletedByUserId, 'Manual deletion by user']
|
||||
);
|
||||
} catch (auditErr) {
|
||||
console.warn('감사 로그 추가 실패:', auditErr.message);
|
||||
// 감사 로그 실패가 전체 트랜잭션을 롤백시키지는 않음
|
||||
}
|
||||
console.log(`[삭제 로그] 보고서 ID: ${reportId}, 삭제자: ${deletedByUserId}, 사유: Manual deletion by user`);
|
||||
}
|
||||
|
||||
await conn.commit();
|
||||
|
||||
Reference in New Issue
Block a user