Commit Graph

99 Commits

Author SHA1 Message Date
Hyungi Ahn
6b7f9d4627 fix: 로그인 후 리다이렉트 경로를 새 대시보드로 수정
변경사항:
- authController.js: 로그인 후 /pages/dashboard.html로 리다이렉트
- config.js: 모든 대시보드 경로를 /pages/dashboard.html로 통일
- work/report-view.html: 대시보드 버튼 경로 수정

이제 로그인하면 올바른 경로로 이동합니다.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 10:50:54 +09:00
Hyungi Ahn
73e5eff7bd docs: 페이지 구조 개편 문서화
- CODING_GUIDE에 새 페이지 구조 및 네이밍 규칙 추가
- 상세한 개편 과정 문서 작성 (2026-01-20-page-restructure.md)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 10:46:10 +09:00
Hyungi Ahn
a6ab9e395d refactor: 페이지 구조 대대적 개편 - 명확한 폴더 구조 및 파일명 개선
## 주요 변경사항

### 1. 미사용 페이지 아카이브 (24개)
- admin 폴더 전체 (8개) → .archived-admin/
- 분석 페이지 (5개) → .archived-*
- 공통 페이지 (5개) → .archived-*
- 대시보드 페이지 (2개) → .archived-*
- 기타 (4개) → .archived-*

### 2. 새로운 폴더 구조
```
pages/
├── dashboard.html          (메인 대시보드)
├── work/                   (작업 관련)
│   ├── report-create.html  (작업보고서 작성)
│   ├── report-view.html    (작업보고서 조회)
│   └── analysis.html       (작업 분석)
├── admin/                  (관리 기능)
│   ├── index.html          (관리 메뉴 허브)
│   ├── projects.html       (프로젝트 관리)
│   ├── workers.html        (작업자 관리)
│   ├── codes.html          (코드 관리)
│   └── accounts.html       (계정 관리)
└── profile/                (프로필)
    ├── info.html           (내 정보)
    └── password.html       (비밀번호 변경)
```

### 3. 파일명 개선
- group-leader.html → dashboard.html
- daily-work-report.html → work/report-create.html
- daily-work-report-viewer.html → work/report-view.html
- work-analysis.html → work/analysis.html
- work-management.html → admin/index.html
- project-management.html → admin/projects.html
- worker-management.html → admin/workers.html
- code-management.html → admin/codes.html
- my-profile.html → profile/info.html
- change-password.html → profile/password.html
- admin-settings.html → admin/accounts.html

### 4. 내부 링크 전면 수정
- navbar.html 프로필 메뉴 링크 업데이트
- dashboard.html 빠른 작업 링크 업데이트
- admin/* 페이지 간 링크 업데이트
- load-navbar.js 대시보드 경로 수정

영향받는 파일: 39개

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 10:44:34 +09:00
Hyungi Ahn
33e9e2afec fix: 대시보드 버튼을 메인 대시보드(그룹장 대시보드)로 통일
모든 역할의 사용자가 group-leader.html로 이동하도록 수정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 08:54:47 +09:00
Hyungi Ahn
05a9de8d2f fix: 대시보드 버튼을 역할별 공통 대시보드로 연결
변경사항:
- navbar의 대시보드 버튼이 개인 대시보드가 아닌 역할별 공통 대시보드로 이동하도록 수정
- Admin/System → /pages/dashboard/system.html
- 그룹장 → /pages/dashboard/group-leader.html
- 일반 사용자 → /pages/dashboard/user.html

수정된 파일:
- web-ui/components/navbar.html
- web-ui/js/load-navbar.js

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 08:53:29 +09:00
Hyungi Ahn
e8829a0bc7 docs: UI/UX 디자인 가이드 추가
- 이모지 사용 금지 정책 추가
- 모던하고 깔끔한 디자인 원칙 명시
- 색상 가이드 및 컴포넌트 구조 설명

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 08:52:40 +09:00
Hyungi Ahn
4f0af62d8c style: 네비게이션 색상 및 레이아웃 개선
변경사항:
1. navbar 배경색을 하늘색 계열로 변경 (#0ea5e9, #38bdf8, #7dd3fc)
2. 대시보드 버튼을 header에 눈에 띄게 추가
3. work-management.css의 navbar 관련 중복 스타일 제거하여 레이아웃 충돌 해결

수정된 파일:
- web-ui/components/navbar.html
- web-ui/css/work-management.css

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 08:51:49 +09:00
Hyungi Ahn
8a5480177b fix: 관리 페이지 네비게이션 구조 표준화
- 모든 관리 페이지에서 navbar-container를 work-report-container 내부로 이동
- design-system.css 임포트 추가하여 일관된 navbar 스타일 적용
- daily-work-report.html의 원래 구조를 표준으로 채택

변경된 파일:
- web-ui/pages/management/code-management.html
- web-ui/pages/management/project-management.html
- web-ui/pages/management/work-management.html
- web-ui/pages/management/worker-management.html

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 08:48:35 +09:00
Hyungi Ahn
4ac0605887 refactor: 네비게이션 헤더 최신 디자인으로 전면 개편 및 로그인 버그 수정
- fix: 로그인 API에서 user.role_name 필드 올바르게 사용 (auth.service.js)
- refactor: navbar 컴포넌트를 최신 dashboard-header 스타일로 전환
- refactor: 구버전 work-report-header 제거 (6개 페이지)
- refactor: load-navbar.js를 최신 헤더 구조에 맞게 업데이트
- style: 파란색 그라데이션 헤더, 실시간 시계, 향상된 프로필 메뉴
- docs: 2026-01-20 개발 로그 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 08:40:19 +09:00
Hyungi Ahn
6933f67a2e docs: 작업자-계정 연동 기능 가이드 추가
작업자 계정 연동 기능에 대한 상세 가이드 문서를 작성했습니다.

## 문서 내용

### 1. 기능 개요
- 개념 변경 (작업 보고서 표시 → 계정 연동)
- 주요 변경사항 설명

### 2. 기술 상세
- 데이터베이스 스키마
- 백엔드 API 구현
- 프론트엔드 구현
- 한글→영문 변환 로직

### 3. 사용 가이드
- 신규 작업자 등록 + 계정 생성
- 기존 작업자에 계정 추가
- 계정 연동 해제
- 퇴사 처리

### 4. 배포 및 운영
- 배포 절차
- 테스트 시나리오
- 문제 해결 가이드
- 보안 고려사항

### 5. 향후 개선 계획
- 비밀번호 정책
- 계정 관리 UI
- 대량 작업 기능
- 알림 기능

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 10:29:18 +09:00
Hyungi Ahn
1e4dbf10db feat: 배포 자동화 스크립트 추가
배포 과정을 자동화하는 스크립트와 가이드 문서를 추가했습니다.

## 추가된 파일

### deploy.sh
자동 배포 스크립트:
1. Git Pull
2. NPM Install (package.json 변경 시)
3. 데이터베이스 마이그레이션 (확인 후 실행)
4. PM2 서버 재시작
5. 상태 확인

### DEPLOY.md
배포 가이드 문서:
- 자동 배포 방법
- 수동 배포 단계
- 배포 후 확인사항
- 문제 해결 가이드
- 데이터베이스 백업/복구 방법

## 사용 방법

서버에서 다음 명령어로 배포:
\`\`\`bash
cd api.hyungi.net
chmod +x deploy.sh  # 처음 한 번만
./deploy.sh
\`\`\`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 10:24:45 +09:00
Hyungi Ahn
bea62dfdee refactor: 작업자 관리 개선 - 계정 연동 기능으로 변경
작업 보고서 표시 여부 대신 계정 연동 기능으로 개선했습니다.

## 주요 변경사항

### 개념 변경
- **이전**: 작업 보고서 표시 여부 (show_in_work_reports)
- **이후**: 계정 생성/연동 기능

### 데이터베이스
- **마이그레이션**: 20260119095549_add_worker_display_fields.js
  - show_in_work_reports 컬럼 제거
  - employment_status만 유지 (employed/resigned)

- **workerModel**:
  - getAll, getById에서 users 테이블 JOIN하여 user_id 조회
  - create, update에서 show_in_work_reports 필드 제거

### 백엔드 API
- **workerController.js**:
  - createWorker: create_account 체크 시 자동으로 users 테이블에 계정 생성
    - username: hangulToRoman으로 한글 이름 변환
    - password: 초기 비밀번호 '1234' (bcrypt 해시)
    - role: User 역할 자동 할당
  - updateWorker:
    - create_account=true & 계정 없음 → 계정 생성
    - create_account=false & 계정 있음 → 계정 연동 해제 (users.worker_id=NULL)

### 프론트엔드
- **worker-management.html**:
  - "작업 보고서 표시" → "🔐 계정 생성/연동"으로 변경
  - 체크 시 로그인 계정 자동 생성 안내

- **worker-management.js**:
  - 카드 렌더링: user_id 존재 여부로 계정 연동 상태 표시 (🔐 아이콘)
  - saveWorker: create_account 필드 전송
  - show_in_work_reports 관련 로직 모두 제거

- **daily-work-report.js**:
  - 필터링 조건 단순화: 퇴사자만 제외 (employment_status≠resigned)
  - 계정 여부와 무관하게 모든 재직자 표시

## 사용 방법
1. 작업자 등록/수정 시 "계정 생성/연동" 체크
2. 자동으로 로그인 계정 생성 (초기 비밀번호: 1234)
3. 계정이 있는 작업자는 나의 대시보드, 연차/출퇴근 관리 가능

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 10:17:31 +09:00
Hyungi Ahn
25cca1482e feat: 작업자 관리 개선 - 작업보고서 표시/현장직 구분/퇴사 처리
작업자 관리 페이지에 3가지 상태 관리 기능을 추가했습니다:
1. 작업 보고서 표시 여부 (관리자 등은 작업보고서에 표시 안함)
2. 현장직/사무직 구분 (사무직은 출퇴근 관리 불필요)
3. 퇴사 처리 (퇴사자 별도 표시)

## 주요 변경사항

### 데이터베이스
- **마이그레이션**: 20260119095549_add_worker_display_fields.js
  - workers 테이블에 show_in_work_reports (BOOLEAN) 추가
  - workers 테이블에 employment_status (ENUM: employed, resigned) 추가

### 백엔드
- **workerModel.js**: create, update 함수에 새로운 필드 처리 로직 추가

### 프론트엔드
- **worker-management.html**: 작업자 모달에 3가지 체크박스 추가
  - 작업 보고서에 표시
  - 현장직 (활성화) - 사무직과 구분
  - 퇴사 처리
- **worker-management.js**:
  - 퇴사자 카드 렌더링 시 별도 스타일 적용
  - 새 필드 값 로드 및 저장 처리
- **daily-work-report.js**:
  - 작업 보고서 작성 시 show_in_work_reports=true이고 퇴사하지 않은 작업자만 표시

## 배포 절차
```bash
cd api.hyungi.net
npm run db:migrate
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 10:02:32 +09:00
Hyungi Ahn
70630b380a feat: 작업자-계정 통합 및 연차/출근 관리 시스템 구축
모든 작업자가 개인 계정으로 로그인하여 본인의 연차와 출근 기록을 확인할 수 있는 시스템을 구축했습니다.

주요 기능:
- 작업자-계정 1:1 통합 (기존 작업자 자동 계정 생성)
- 연차 관리 시스템 (연도별 잔액 관리)
- 출근 기록 시스템 (일일 근태 기록)
- 나의 대시보드 페이지 (개인 정보 조회)

데이터베이스:
- workers 테이블에 salary, base_annual_leave 컬럼 추가
- work_attendance_types, vacation_types 테이블 생성
- daily_attendance_records 테이블 생성
- worker_vacation_balance 테이블 생성
- 기존 작업자 자동 계정 생성 (username: 이름 기반)
- Guest 역할 추가

백엔드 API:
- 한글→영문 변환 유틸리티 (hangulToRoman.js)
- UserRoutes에 개인 정보 조회 API 추가
  - GET /api/users/me (내 정보)
  - GET /api/users/me/attendance-records (출근 기록)
  - GET /api/users/me/vacation-balance (연차 잔액)
  - GET /api/users/me/work-reports (작업 보고서)
  - GET /api/users/me/monthly-stats (월별 통계)

프론트엔드:
- 나의 대시보드 페이지 (my-dashboard.html)
- 연차 정보 위젯 (총/사용/잔여)
- 월별 출근 캘린더
- 근무 시간 통계
- 최근 작업 보고서 목록
- 네비게이션 바에 "나의 대시보드" 메뉴 추가

배포 시 주의사항:
- 마이그레이션 실행 필요
- 자동 생성된 계정 초기 비밀번호: 1234
- 작업자들에게 첫 로그인 후 비밀번호 변경 안내 필요

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 09:49:48 +09:00
Hyungi Ahn
337cd14a15 docs: 작업 분석 페이지 수정 개발로그 추가
작업 분석 페이지 모듈 로딩 오류 수정 작업에 대한 상세 개발로그를 추가했습니다.

포함 내용:
- 발견된 문제점 및 원인 분석
- 해결 방안 및 코드 변경 사항
- 전체 페이지 점검 결과
- Before/After 테스트 결과
- 기술적 배경 (ES6 모듈 시스템)
- 향후 개선 계획

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 09:29:01 +09:00
Hyungi Ahn
b0d17cd53b fix(web-ui): 작업 분석 페이지 모듈 로딩 오류 수정
작업 분석 페이지에서 발생하던 JavaScript 모듈 로딩 오류를 해결했습니다.

문제점:
- SyntaxError: import call expects one or two arguments
- ReferenceError: Can't find variable: apiCall
- 네비게이션 바 미표시

해결 방법:
- api-config.js, load-navbar.js, work-analysis.js에 type="module" 추가
- work-analysis.js에서 api-config.js import하여 로딩 순서 보장
- 스크립트 버전 업데이트 (캐시 클리어)

수정된 파일:
- web-ui/pages/analysis/work-analysis.html: 스크립트 태그에 type="module" 추가
- web-ui/js/work-analysis.js: api-config.js import 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 08:57:57 +09:00
Hyungi Ahn
d810a8b339 refactor(web-ui): 전체 UI 반응형 디자인 개선
모든 화면 크기에서 일관되고 안정적인 사용자 경험을 제공하도록
UI 컴포넌트를 전면 개선했습니다.

주요 변경사항:
- 네비게이션 바: flex-wrap, rem 단위, sticky positioning 적용
- 사용자 정보 영역: max-width로 크기 제한, 텍스트 overflow 처리
- 공통 헤더: clamp()로 반응형 폰트, 반응형 패딩 적용
- 모든 관리 페이지: ES6 모듈 로딩 통일 (type="module")
- 반응형 breakpoint: 1200px, 768px, 640px, 480px

개선 효과:
 모든 페이지에서 일관된 헤더 표시
 사용자 정보 영역 늘어나는 문제 해결
 모든 화면 크기에서 최적화된 레이아웃
 rem 단위 사용으로 접근성 개선

수정된 파일:
- web-ui/components/navbar.html: 전면 리팩토링
- web-ui/css/common.css: 반응형 스타일 추가
- web-ui/pages/**/*.html: 모듈 로딩 및 버전 업데이트 (13개 파일)
- web-ui/js/*.js: 모듈 시스템 개선

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 08:54:44 +09:00
Hyungi Ahn
344ad35651 fix: 작업자/프로젝트 관리 페이지 모듈 로딩 및 DB 스키마 동기화 수정
## 수정 내용

### 1. JavaScript 모듈 로딩 문제 수정
- ES6 import 사용 파일에 type="module" 속성 추가
- api-config.js, load-navbar.js, worker-management.js, project-management.js

### 2. DB 스키마 불일치 해결
- workers 테이블 실제 구조에 맞게 코드 수정
- 존재하지 않는 컬럼 제거: phone_number, email, hire_date, department, notes
- 실제 컬럼 사용: join_date, salary, annual_leave

### 3. 백엔드 수정
- workerModel.js: create, update 함수를 실제 테이블 구조에 맞게 수정
- workerController.js: 상세 로깅 추가

### 4. 프론트엔드 수정
- worker-management.js: 데이터 전송 구조 수정
- api-config.js: 에러 로깅 개선
- HTML 파일: 스크립트 type="module" 추가 및 버전 업데이트

### 5. 개발 문서
- 개발로그 추가: 2026-01-19_작업자관리_스키마_동기화.md

## 영향 범위
- 작업자 관리 페이지: 상태 변경 기능 정상화
- 프로젝트 관리 페이지: 모듈 로딩 오류 수정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 08:35:36 +09:00
Hyungi Ahn
79bd9324ca refactor(web-ui): Apply modular structure and refactor dashboard
This commit applies the modular refactoring to the web-ui,
including the new daily attendance tracking feature.

- **Modular Structure:** Re-introduced the modular files 'config.js',
  'component-loader.js', and 'navigation.js' to centralize configuration,
  component loading, and navigation logic.
- **Refactored Dashboard:** Refactored 'group-leader-dashboard.js' to use
  the new 'apiCall' function from 'api-config.js' for API requests,
  removing duplicated code and improving error handling.
- **ES6 Modules:** Updated 'group-leader.html' to load scripts as
  ES6 modules ('type="module"'), ensuring compatibility with the
  modular JavaScript files.
- **Clean-up:** Removed unnecessary global variables and duplicated
  functions, improving code quality and maintainability.
2026-01-06 17:29:39 +09:00
Hyungi Ahn
7d89ec448c feat: Implement daily attendance tracking system
- Backend: Auto-sync work reports with attendance records
- Backend: Lazy initialization of daily active worker records
- Frontend: Real-time attendance status on Group Leader Dashboard
2026-01-06 17:15:56 +09:00
Hyungi Ahn
b4037c9395 feat(web-ui): Refactor web-ui for improved maintainability and modularity
This commit introduces a series of refactoring changes to the web-ui
to remove hardcoded values and improve page integration.

- **Centralized Configuration:** Created  to
  centralize API ports, paths, and navigation URLs, replacing
  hardcoded values across multiple files.
- **Modular Component Loading:** Introduced
  to handle dynamic loading of common HTML components (e.g., sidebar, navbar),
  using paths from .
- **Modular Navigation:** Created  to centralize
  page redirection logic, improving maintainability and reducing direct
   manipulations.
- **Refactored Existing Modules:** Updated ,
  , , and
   to utilize the new , ,
  and  modules.
- **ES6 Module Compatibility:** Ensured  loads scripts
  as ES6 modules () to support  statements.
2026-01-06 15:54:49 +09:00
Hyungi Ahn
48fff7df64 Fix: Worker/Project status update and filtering issues
- Added cache invalidation for Workers and Projects
- Implemented server-side status filtering for Workers
- Fixed worker update query bug (removed non-existent join_date column)
- Updated daily-work-report UI to fetch only active workers
2026-01-06 15:50:40 +09:00
Hyungi Ahn
3549710325 fix: Login 500, DB schema sync, Dashboard missing data, Major Refactoring 2025-12-19 15:47:15 +09:00
Hyungi Ahn
770fa91366 feat: Add interactive setup script
Added an interactive Node.js script (setup.js) to guide users through the initial environment setup. This script prompts for necessary database credentials and generates JWT secrets, then creates/updates the .env file.

A 'setup' script has been added to api.hyungi.net/package.json for easy execution.
This improves the first-time setup experience by streamlining the .env file creation process.
2025-12-19 13:06:26 +09:00
Hyungi Ahn
05843da1c4 refactor(db,frontend): Improve queries and modularize frontend
- Replaced SELECT* queries in 8 models with explicit columns.
- Began modularizing work-report-calendar.js by creating CalendarAPI.js, CalendarState.js, and CalendarView.js.
- Refactored manage-project.js to use global API helpers.
- Fixed API container crash by adding missing volume mounts to docker-compose.yml.
- Added new migration for missing columns in the projects table.
- Documented current DB schema and deployment notes.
2025-12-19 12:42:24 +09:00
Hyungi Ahn
8a8307edfc refactor(frontend): Begin modularizing work-report-calendar
Initiated the process of refactoring the monolithic `work-report-calendar.js` file as outlined in the Phase 2 frontend modernization plan.

- Created `CalendarAPI.js` to encapsulate all API calls related to the calendar, centralizing data fetching logic.
- Created `CalendarState.js` to manage the component's state, removing global variables from the main script.
- Refactored `work-report-calendar.js` to use the new state and API modules.
- Refactored `manage-project.js` to use the existing global API helpers, providing a consistent example for API usage.
2025-12-19 10:46:29 +09:00
Hyungi Ahn
bc5df77595 refactor(db): Replace SELECT * with explicit columns in models
Replaced `SELECT *` statements across multiple data models with explicit column lists to improve query performance, reduce data transfer, and increase code clarity. This is part of the Phase 2 refactoring plan.

- Refactored queries in the following models:
  - projectModel
  - toolsModel
  - attendanceModel
  - dailyIssueReportModel
  - issueTypeModel
  - workReportModel
  - userModel
  - dailyWorkReportModel

fix(api): Add missing volume mounts to docker-compose

Modified docker-compose.yml to mount the `config`, `middlewares`, `utils`, and `services` directories into the API container. This fixes a `MODULE_NOT_FOUND` error that caused the container to crash on startup.

feat(db): Add migration for missing project columns

Created a new database migration to add `is_active`, `project_status`, and `completed_date` columns to the `projects` table, resolving an inconsistency between the model code and the schema.

docs: Add deployment notes

Added a new markdown file to document the testing (macOS, Docker Desktop) and production (Synology NAS, Container Manager) environments.
2025-12-19 10:33:29 +09:00
Hyungi Ahn
b67362a733 feat: Introduce knex for database migrations
- Adds knex.js to manage database schema changes systematically.
- Creates an initial migration file based on `hyungi_schema_v2.sql` to represent the current database state.
- Adds npm scripts (`db:migrate`, `db:rollback`, etc.) for easy execution of migration tasks.
- Archives legacy SQL files and old migration scripts into the `db_archive/` directory to prevent confusion and clean up the project structure.
2025-12-19 09:43:09 +09:00
Hyungi Ahn
9206672b63 feat: Phase 3.8 - 복잡한 분석 컨트롤러 개선
두 개의 복잡한 분석 컨트롤러를 현대적인 패턴으로 전면 개선:

## workReportAnalysisController.js (381 → 430 lines)
- 7개 SQL 쿼리 기반 복합 분석 엔드포인트 개선
- console.error → logger.info/error/warn 전환
- try-catch → asyncHandler 미들웨어 적용
- Error → ValidationError, DatabaseError 전환
- JSDoc 문서화 및 구조화된 로깅 추가
- 4개 함수: getAnalysisFilters, getAnalyticsByPeriod, getProjectAnalysis, getWorkerAnalysis

## workAnalysisController.js (523 → 622 lines)
- 클래스 기반 → 함수 기반 컨트롤러 전환
- console.error → logger.info/error/debug 전환
- try-catch → asyncHandler 미들웨어 적용
- Error → ValidationError, DatabaseError 전환
- validateDateRange 헬퍼 함수 개선 (상세한 에러 컨텍스트)
- JSDoc 문서화 및 구조화된 로깅 추가
- 12개 함수: getStats, getDailyTrend, getWorkerStats, getProjectStats,
  getWorkTypeStats, getRecentWork, getWeekdayPattern, getErrorAnalysis,
  getMonthlyComparison, getWorkerSpecialization, getDashboardData,
  getProjectWorkTypeAnalysis

## 기술적 개선사항
- 통합 에러 처리: 커스텀 에러 클래스로 일관된 에러 핸들링
- 구조화된 로깅: 모든 API 호출에 컨텍스트 정보 포함
- 자동 에러 전파: asyncHandler로 보일러플레이트 코드 제거
- 향상된 유효성 검사: 상세한 에러 메시지와 컨텍스트
- 프로덕션 준비: 표준화된 응답 형식 및 에러 처리

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:30:42 +09:00
Hyungi Ahn
146854e8fe refactor: Phase 3.7 - MonthlyStatus 컨트롤러 개선
주요 변경사항:

1. controllers/monthlyStatusController.js 완전 재작성 (202 → 232 lines)
   * 클래스 기반 → 함수 기반으로 변경:
     - static 메서드 → 독립 함수
     - 모듈 export 방식 변경

   * console.log/error → logger 교체:
     - logger.info: 요청/성공 로깅
     - logger.warn: 경고 로깅
     - logger.error: 실패 로깅

   * try-catch → asyncHandler 사용:
     - 에러 처리 자동화
     - 일관된 에러 응답

   * 커스텀 에러 클래스 적용:
     - ValidationError: 필수 필드/범위 검증
     - ForbiddenError: 관리자 권한 체크
     - DatabaseError: DB 오류

   * 4개 함수 개선:
     - getMonthlyCalendarData: 월별 캘린더 데이터
     - getDailyWorkerDetails: 일별 작업자 상세
     - recalculateMonth: 월별 집계 재계산
     - getStatusInfo: 집계 테이블 상태

   * 상세한 로깅 추가:
     - 요청 파라미터 추적
     - 조회 결과 통계 (일수, 작업자 수, 총 근무시간)
     - 관리자 작업 추적 (요청자 username)

기술적 개선사항:
- 클래스 → 함수: 테스트 및 재사용 용이
- 일관된 에러 처리: ValidationError, ForbiddenError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 가능
- 권한 체크 개선: ForbiddenError 사용
- 코드 가독성 향상: JSDoc 문서화

컨트롤러 개선 최종 현황:
-  15/16 개 컨트롤러 개선 완료 (93.75%)

서비스 레이어 최종 현황:
- 9개 서비스 레이어 구축 완료

Phase 3 리팩토링 완료율: ~95%

남은 작업 (복잡도 매우 높음):
- workReportAnalysisController (복잡한 SQL 분석)
- workAnalysisController (복잡한 SQL 분석)
- systemController (시스템 관리 - 부분 개선 필요)
- authController (인증 - 부분 개선됨)
- userController (사용자 관리 - 부분 개선됨)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:16:21 +09:00
Hyungi Ahn
b6f79d7ca7 refactor: Phase 3.6 - Analysis, WorkReport 서비스 레이어 구축 및 개선
주요 변경사항:

1. services/analysisService.js 개선 (48 → 82 lines, 71% 증가)
   * console.error → logger 교체:
     - logger.info: 요청/성공 로깅
     - logger.error: 실패 로깅

   * Error → 커스텀 에러 클래스 적용:
     - ValidationError: 필수 필드 검증
     - DatabaseError: DB 오류

   * 상세한 로깅 추가:
     - 총 근무시간, 프로젝트 수, 작업자 수, 상세 건수 추적

   * JSDoc 문서화 개선

2. controllers/analysisController.js 개선 (22 → 30 lines)
   * try-catch 제거 → asyncHandler 사용
   * console.error 제거
   * 표준화된 JSON 응답 형식

3. services/workReportService.js 신규 생성 (308 lines)
   * 7개 서비스 함수 구현:
     - createWorkReportService: 단일/다중 보고서 생성
     - getWorkReportsByDateService: 날짜별 조회
     - getWorkReportsInRangeService: 기간별 조회
     - getWorkReportByIdService: 단일 조회
     - updateWorkReportService: 수정
     - removeWorkReportService: 삭제
     - getSummaryService: 월간 요약

   * 커스텀 에러 클래스 적용
   * 구조화된 로깅 통합
   * 필수 필드 검증
   * 배열/단일 데이터 모두 지원

4. controllers/workReportController.js 완전 재작성 (134 → 109 lines, 19% 감소)
   * try-catch 제거 → asyncHandler 사용
   * 모든 비즈니스 로직 서비스 레이어로 이동
   * 표준화된 JSON 응답 형식
   * 에러 처리 자동화
   * 7개 엔드포인트 모두 개선

기술적 개선사항:
- 일관된 에러 처리: ValidationError, NotFoundError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 가능
- 코드 중복 제거: try-catch 패턴 완전 제거
- 테스트 용이성: 서비스 함수 독립적 테스트 가능
- 유지보수성: 비즈니스 로직과 HTTP 레이어 완전 분리

서비스 레이어 진행 상황:
-  dailyWorkReportService.js (Phase 3.1)
-  attendanceService.js (Phase 3.2)
-  issueTypeService.js (Phase 3.4)
-  toolsService.js (Phase 3.4)
-  dailyIssueReportService.js (Phase 3.5 - 개선)
-  uploadService.js (Phase 3.5)
-  analysisService.js (Phase 3.6 - 개선)
-  workReportService.js (Phase 3.6)
-  auth.service.js (기존)

총 9개 서비스 레이어 구축 완료

컨트롤러 개선 현황:
-  14/16 개 컨트롤러 개선 완료 (87.5%)

남은 컨트롤러:
- workReportAnalysisController
- workAnalysisController
- monthlyStatusController
- systemController
- authController
- userController (일부)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:53:53 +09:00
Hyungi Ahn
ffe9619abd refactor: Phase 3.5 - DailyIssueReport, Upload 서비스 레이어 개선
주요 변경사항:

1. services/dailyIssueReportService.js 개선 (93 → 170 lines, 83% 증가)
   * console.error → logger 교체:
     - logger.info: 작업 시작/성공 로깅
     - logger.error: 실패 로깅
     - logger.warn: 경고 로깅

   * Error → 커스텀 에러 클래스 적용:
     - ValidationError: 필수 필드 검증 실패
     - NotFoundError: 리소스 없음
     - DatabaseError: DB 오류

   * 상세한 JSDoc 문서화:
     - 모든 파라미터 타입 및 설명 추가
     - 함수 목적 및 동작 명시

   * 구조화된 로깅:
     - 모든 요청에 컨텍스트 정보 포함
     - 성공/실패 추적 가능

2. controllers/dailyIssueReportController.js 개선 (58 → 65 lines)
   * try-catch 제거 → asyncHandler 사용
   * console.error 제거
   * 에러 처리 자동화
   * 표준화된 JSON 응답 형식

3. services/uploadService.js 신규 생성 (96 lines)
   * 2개 서비스 함수 구현:
     - createUploadService: 문서 업로드 생성
     - getAllUploadsService: 전체 문서 조회

   * 커스텀 에러 클래스 적용
   * 구조화된 로깅 통합
   * 필수 필드 검증 (original_name, stored_name, file_path)
   * 파일 메타데이터 로깅

4. controllers/uploadController.js 완전 재작성 (26 → 39 lines)
   * try-catch 제거 → asyncHandler 사용
   * 모든 비즈니스 로직 서비스 레이어로 이동
   * 표준화된 JSON 응답 형식
   * 에러 처리 자동화

기술적 개선사항:
- 일관된 에러 처리: ValidationError, NotFoundError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 및 디버깅 용이
- 코드 중복 제거: try-catch 패턴 제거
- 테스트 용이성: 서비스 함수 독립적 테스트 가능
- 유지보수성: 비즈니스 로직과 HTTP 레이어 분리

서비스 레이어 진행 상황:
-  dailyWorkReportService.js (Phase 3.1)
-  attendanceService.js (Phase 3.2)
-  issueTypeService.js (Phase 3.4)
-  toolsService.js (Phase 3.4)
-  dailyIssueReportService.js (Phase 3.5 - 개선)
-  uploadService.js (Phase 3.5 - 신규)

전체 진행률:
- 컨트롤러: 16개 중 12개 개선 완료 (75%)
- 서비스 레이어: 6개 생성/개선 완료

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:47:19 +09:00
Hyungi Ahn
19e8fd9a35 refactor: Phase 3.4 - IssueType, Tools 서비스 레이어 구축
주요 변경사항:

1. services/issueTypeService.js 신규 생성 (182 lines)
   * 4개 서비스 함수 구현:
     - createIssueTypeService: 이슈 유형 생성
     - getAllIssueTypesService: 전체 이슈 유형 조회
     - updateIssueTypeService: 이슈 유형 수정
     - removeIssueTypeService: 이슈 유형 삭제

   * 커스텀 에러 클래스 적용:
     - ValidationError: 필수 필드 검증
     - NotFoundError: 리소스 없음
     - DatabaseError: DB 오류

   * 구조화된 로깅 통합
   * 필수 필드 검증 (category, subcategory)

2. controllers/issueTypeController.js 완전 재작성 (55 → 66 lines)
   * try-catch 제거 → asyncHandler 사용
   * 모든 비즈니스 로직 서비스 레이어로 이동
   * 표준화된 JSON 응답 형식
   * 에러 처리 자동화

3. services/toolsService.js 신규 생성 (208 lines)
   * 5개 서비스 함수 구현:
     - getAllToolsService: 전체 도구 조회
     - getToolByIdService: 단일 도구 조회
     - createToolService: 도구 생성
     - updateToolService: 도구 수정
     - deleteToolService: 도구 삭제

   * 커스텀 에러 클래스 적용
   * 구조화된 로깅 통합
   * 필수 필드 검증 (name)
   * ID 유효성 검증

4. controllers/toolsController.js 완전 재작성 (76 → 76 lines)
   * try-catch 제거 → asyncHandler 사용
   * 모든 비즈니스 로직 서비스 레이어로 이동
   * 표준화된 JSON 응답 형식
   * 에러 처리 자동화

기술적 개선사항:
- 서비스 레이어 패턴 적용: 비즈니스 로직 분리
- 일관된 에러 처리: ValidationError, NotFoundError, DatabaseError
- 구조화된 로깅: 모든 작업 추적 가능
- 코드 중복 제거: try-catch 패턴 제거
- 테스트 용이성: 서비스 함수 독립적 테스트 가능
- JSDoc 문서화: 모든 함수에 상세 설명 추가

컨트롤러 코드 감소:
- issueTypeController: 55 → 66 lines (문서화 포함, 로직은 단순화)
- toolsController: 76 → 76 lines (코드 품질 향상)

서비스 레이어 진행 상황:
-  dailyWorkReportService.js (Phase 3.1)
-  attendanceService.js (Phase 3.2)
-  issueTypeService.js (Phase 3.4)
-  toolsService.js (Phase 3.4)

남은 작업:
- workReportAnalysis, workAnalysis, monthlyStatus 등
- 복잡한 분석 컨트롤러들

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:23:59 +09:00
Hyungi Ahn
349ab60561 refactor: Phase 3.3 - 통합 인증/인가 미들웨어 시스템 구축
주요 변경사항:

1. middlewares/auth.js 신규 생성 (355 lines)
   * 4개 핵심 미들웨어 통합:
     - requireAuth: JWT 토큰 검증
     - requireRole(...roles): 특정 역할 체크
     - requireMinLevel(level): 계층적 권한 레벨 체크
     - requireOwnerOrAdmin(options): 소유자/관리자 체크

   * 커스텀 에러 클래스 적용:
     - AuthenticationError (401)
     - ForbiddenError (403)

   * 구조화된 로깅 시스템 통합
   * 레거시 호환성 별칭 제공:
     - verifyToken = requireAuth
     - requireAdmin = requireRole('admin', 'system')
     - requireSystem = requireRole('system')

   * ACCESS_LEVELS 상수 정의 및 export

2. 라우터 업데이트 (새로운 미들웨어 적용)
   * routes/workReportAnalysisRoutes.js
     - authMiddleware → auth로 변경
     - requireAdmin → requireRole('admin', 'system')

   * routes/systemRoutes.js
     - 커스텀 requireSystemAccess 제거
     - requireRole('system') 사용
     - 14줄 코드 감소 (298 → 284 lines)

   * routes/auth.js
     - utils/access의 requireAccess 제거
     - requireAuth + requireRole 조합 사용

3. 레거시 호환성 래퍼 (하위 호환성 유지)
   * middlewares/authMiddleware.js (89 → 37 lines, 58% 감소)
     - auth.js의 래퍼로 변경
     - @deprecated 태그 추가
     - 기존 22개 파일 호환성 유지

   * middlewares/accessMiddleware.js (33 → 30 lines)
     - requireMinLevel 래퍼로 변경
     - @deprecated 태그 및 마이그레이션 가이드 추가

   * utils/access.js
     - requireAccess 레거시 함수 추가 (하위 호환성)
     - 유틸리티 함수들은 그대로 유지

기술적 개선사항:
- 중복 코드 제거: 4개 파일에 분산된 인증 로직 통합
- 일관된 에러 처리: 커스텀 에러 클래스 사용
- 상세한 로깅: 인증/인가 실패 원인 추적 가능
- 보안 강화: TokenExpiredError, JsonWebTokenError 세분화 처리
- 확장성: 새로운 권한 체크 패턴 쉽게 추가 가능
- JSDoc 문서화: 모든 함수에 상세한 사용 예제 포함

통합 전후 비교:
- 미들웨어 파일: 4개 → 1개 (통합) + 3개 (래퍼)
- 중복 코드: ~150 lines → 0 lines
- 일관성: 4가지 다른 패턴 → 1가지 통합 패턴

레거시 호환성:
- 기존 22개 라우터 파일 중 19개는 수정 없이 동작
- 3개 라우터만 새로운 패턴으로 업데이트 (예시용)
- verifyToken, requireAdmin, requireSystem 별칭 제공

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:12:44 +09:00
Hyungi Ahn
405bf0dc65 refactor: Phase 3.2 - Attendance, Worker, Project 컨트롤러 개선
주요 변경사항:
- services/attendanceService.js 신규 생성 (269 lines)
  * 9개 서비스 함수로 비즈니스 로직 분리
  * 커스텀 에러 클래스 적용 (ValidationError, DatabaseError)
  * 구조화된 로깅 시스템 통합

- controllers/attendanceController.js 완전 재작성 (306 → 168 lines, 45% 감소)
  * 클래스 기반에서 함수 기반 export로 변경
  * 모든 비즈니스 로직을 서비스 레이어로 이동
  * asyncHandler 미들웨어로 에러 처리 자동화

- controllers/workerController.js 개선
  * 커스텀 에러 클래스 적용
  * console.log → logger 교체
  * 캐시 무효화 로직 유지

- controllers/projectController.js 완전 재작성 (117 → 163 lines)
  * 모든 함수에 새로운 에러 클래스 적용
  * 구조화된 로깅 추가
  * 표준화된 JSON 응답 형식

기술 스택:
- Custom Error Classes: ValidationError, NotFoundError, DatabaseError
- Structured Logging: logger.info/error/warn/debug with context
- asyncHandler: Automatic async error handling
- Service Layer Pattern: Business logic separation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:06:35 +09:00
Hyungi Ahn
09f6756da7 refactor: Phase 3.1 - DailyWorkReport 서비스 레이어 개선
작업 보고서 서비스와 컨트롤러를 새로운 에러 핸들링 및
로깅 시스템으로 업그레이드하여 코드 품질 및 유지보수성 향상

주요 변경사항:

services/dailyWorkReportService.js:
- 새로운 커스텀 에러 클래스 적용
  * ValidationError: 유효성 검증 실패
  * NotFoundError: 리소스를 찾을 수 없음
  * DatabaseError: 데이터베이스 오류
- console.log → logger 유틸리티로 전환
  * 구조화된 로깅 (context 포함)
  * 로그 레벨 분리 (info, warn, error)
  * 파일 로깅 지원
- 상세한 에러 컨텍스트 제공
  * 필수 필드, 받은 값, 유효 범위 등
  * 디버깅 및 문제 해결 용이성 향상

controllers/dailyWorkReportController.js:
- 새로운 에러 클래스 import
- asyncHandler 미들웨어 통일
- createDailyWorkReport 함수 간소화
  * try-catch 제거 (asyncHandler가 처리)
  * 표준 JSON 응답 포맷 사용

개선 효과:
- 에러 메시지 명확성 향상
- 로그 분석 및 모니터링 용이
- 일관된 에러 처리 패턴
- 테스트 가능성 향상
- 프로덕션 환경 파일 로깅 지원

파일 통계:
- 2개 파일 수정
- +115 -65 (net +50 lines)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 12:00:16 +09:00
Hyungi Ahn
4264e5f8b3 refactor: Phase 2-3 - index.js 대폭 축소 및 설정 파일 분리 완료
index.js를 605줄에서 128줄로 축소 (79% 감소)
미들웨어, 라우트, 데이터베이스 설정을 별도 파일로 분리하여
코드 가독성 및 유지보수성 대폭 향상

주요 변경사항:

신규 파일 (3개):
- config/database.js: DB 연결 풀 관리 (dbPool.js에서 이동)
  * 환경 변수 기반 설정
  * 자동 재연결 로직 (최대 5회 재시도)
  * UTF-8MB4 문자셋 지원
  * logger 통합

- config/middleware.js: 미들웨어 중앙 관리
  * Helmet 보안 헤더 (security.js 사용)
  * CORS 설정 (cors.js 사용)
  * Compression (성능 최적화)
  * Body parser (50MB 제한)
  * 정적 파일 서빙 (public, uploads)
  * Response formatter

- config/routes.js: 라우트 중앙 관리
  * 모든 라우터 import 및 등록
  * Rate limiting 설정 (login, API)
  * 인증 미들웨어 적용
  * 공개 경로 관리
  * Swagger 문서 설정

수정 파일 (2개):
- index.js: 605줄 → 128줄 (79% 감소)
  * 간결한 서버 초기화 로직
  * setupMiddlewares/setupRoutes 함수 사용
  * Graceful shutdown 유지
  * 에러 핸들러 유지
  * 캐시 초기화 로직 유지

- dbPool.js: 호환성 레거시 파일로 전환
  * config/database.js로 위임
  * @deprecated 주석 추가
  * 기존 코드 하위 호환성 유지 (22개 파일에서 사용 중)

파일 통계:
- 3개 파일 추가, 2개 파일 수정
- +92 -621 (net -529 lines)
- index.js: 605 → 128 lines (-477 lines, -79%)

검증 필요 사항:
- [ ] 서버 정상 시작 확인
- [ ] 모든 API 엔드포인트 동작 확인
- [ ] CORS 설정 동작 확인
- [ ] 인증 미들웨어 동작 확인
- [ ] Rate limiting 동작 확인

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 11:55:15 +09:00
Hyungi Ahn
16f1d7fae5 refactor: Phase 2-2 - 사용자 관리 모듈화 및 설정 파일 분리
사용자 관리 API를 컨트롤러/라우터 패턴으로 리팩토링하고,
CORS 및 보안 설정을 별도 파일로 분리하여 코드 구조 개선

주요 변경사항:
- userController.js: 새로운 에러 핸들링 및 로깅 시스템 적용
  * ValidationError, NotFoundError, ConflictError 등 커스텀 에러 사용
  * logger 유틸리티로 구조화된 로깅
  * 관리자 권한 검증 헬퍼 함수 추가

- index.js: 인라인 사용자 관리 라우트 제거 (888 → 605 lines)
  * 283줄 감소로 코드 가독성 대폭 향상
  * userRoutes 모듈 import 및 사용

- userRoutes.js: 문서화 및 로깅 개선
  * JSDoc 헤더 추가
  * adminOnly 미들웨어에 로깅 추가

신규 파일:
- config/cors.js: CORS 정책 설정 (허용 origin, 메소드, 헤더)
- config/security.js: Helmet 보안 헤더 설정 (CSP, HSTS, XSS 방지)
- middlewares/activityLogger.js: HTTP 요청/응답 활동 로깅

파일 통계:
- 3개 파일 수정, 3개 파일 추가
- +437 -480 (net -43 lines)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 11:01:06 +09:00
Hyungi Ahn
b2461502e7 refactor(phase2-1): 에러 처리 및 로깅 시스템 개선
## 추가된 파일
- utils/errors.js: 표준화된 커스텀 에러 클래스
  - AppError, ValidationError, AuthenticationError
  - ForbiddenError, NotFoundError, ConflictError
  - DatabaseError, ExternalApiError, TimeoutError

- utils/logger.js: 통합 로깅 유틸리티
  - 로그 레벨별 관리 (ERROR, WARN, INFO, DEBUG)
  - 콘솔 및 파일 로깅 지원
  - HTTP 요청/DB 쿼리 전용 로거

## 개선된 파일
- middlewares/errorHandler.js: 에러 핸들러 개선
  - 새로운 AppError 클래스 사용
  - logger 통합
  - asyncHandler 및 notFoundHandler 추가

## 다음 단계
- config 파일들 생성 (cors, security)
- activityLogger 미들웨어 생성
- userController 인라인 코드 분리

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 10:28:51 +09:00
Hyungi Ahn
4569791f9d docs: Phase 1 리팩토링 로그 업데이트
- Phase 1 완료 내역 상세 기록
- 변경 사항 및 코드 비교 추가
- 통계 업데이트 (24% 완료)
- 다음 작업 계획 명시

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 10:18:12 +09:00
Hyungi Ahn
1e7155b864 refactor: Phase 1 - 긴급 보안 및 중복 제거
## 🚨 보안 강화
- 하드코딩된 비밀번호를 환경변수로 전환
- .env.example 생성 및 보안 가이드 추가
- docker-compose.yml 환경변수 적용
- README.md에서 실제 비밀번호 제거

## 🗑️ 중복 제거
- synology_deployment/ 디렉토리 제거 (268MB)
- synology_deployment*.tar.gz 아카이브 제거 (234MB)
- 총 502MB의 중복 파일 삭제

## 🧹 백업 파일 정리
- *.backup 파일 제거 (10개)
- *복사본* 파일 제거
- *이전* 파일 제거
- json(백업)/ 디렉토리 제거

## 📋 .gitignore 업데이트
- 백업 파일 패턴 추가
- 보안 파일 제외 (.env, *.pem, *.key)
- 임시 파일 제외 (*.tmp, *.new)
- 빌드 아티팩트 제외 (*.tar.gz)

## 📚 문서화
- docs/ 디렉토리 구조 생성
- 리팩토링 분석 및 계획 문서 작성
- 코딩 스타일 가이드 작성
- 개발 환경 설정 가이드 작성
- 시스템 아키텍처 문서 작성

## 변경된 파일
- .env.example (신규)
- .gitignore (업데이트)
- docker-compose.yml (환경변수 적용)
- README.md (보안 정보 제거)
- docs/* (신규 문서 7개)

## 보안 개선 효과
 비밀번호 노출 위험 제거
 Git 히스토리에서 민감 정보 분리
 환경별 설정 분리 가능
 배포 보안 강화

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 10:16:57 +09:00
Hyungi Ahn
5c8f553f87 fix: 작업자 비활성화 기능 완전 수정
작업자 퇴사 시 비활성화 기능이 제대로 작동하지 않던 문제 해결

백엔드 수정:
- is_active 가상 필드 추가 (status 기반 자동 생성)
- ISO 8601 날짜 형식을 MySQL DATE 형식으로 변환
- 작업자 업데이트 필드 오류 수정 (salary, annual_leave 제거)

프론트엔드 수정 (11개 파일):
- 모든 페이지에서 비활성 작업자 필터링 로직 추가
- 대시보드, 작업보고서, 근태관리, 사용자관리 등 전체 페이지 적용

영향받는 기능:
- 작업자 관리: 비활성화 상태가 DB에 저장되고 새로고침 후에도 유지
- 모든 페이지: 비활성화된 작업자가 선택 목록에서 제외됨

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 17:45:57 +09:00
Hyungi Ahn
a2669e08c4 feat: v2.2.0 - 중복 카드 문제 해결 및 삭제 기능 개선
### 주요 변경사항

1. 작업 현황 모달 중복 카드 문제 근본 해결
   - monthlyStatusModel.getDailyWorkerStatus() 리팩토링
   - 집계 테이블 대신 daily_work_reports에서 직접 조회
   - GROUP BY로 작업자별 1개 카드 보장

2. 삭제 권한 강화
   - 작업보고서 삭제는 그룹장/시스템/관리자만 가능
   - 권한 없는 사용자는 403 에러 반환

3. 작업 입력 UI 개선
   - 작업 항목 삭제 버튼 스타일 개선 (이모지 + 빨간색)
   - 삭제 버튼 호버 효과 추가

4. 작업 현황 모달에 삭제 기능 추가
   - 관리자/그룹장만 삭제 버튼 표시
   - 작업자의 해당 날짜 전체 작업 삭제 가능

5. 시놀로지 배포 스크립트 추가
   - update.sh: DB 보존하면서 코드만 업데이트
   - 안전한 배포 절차 자동화
2025-12-02 13:33:24 +09:00
Hyungi Ahn
a9bce9d20b fix: 캘린더 모달 중복 카드 문제 및 삭제 권한 개선
- monthly_worker_status 조회 시 GROUP BY로 중복 데이터 합산
- 작업보고서 삭제 권한을 그룹장 이상으로 제한 (admin, system, group_leader)
- 중복 데이터 정리를 위한 마이그레이션 SQL 추가 (009_fix_duplicate_monthly_status.sql)
- synology_deployment 버전에도 동일 수정 적용
2025-12-02 13:08:44 +09:00
Hyungi Ahn
beaffcad49 fix: MySQL 8.0 호환성 문제 해결 - db.execute → db.query 변경
🔧 주요 변경사항:
- WorkAnalysis.js: getRecentWork() 함수에서 db.execute → db.query로 변경
- Redis 연결 설정: socket 방식으로 업데이트 (Redis v5+ 호환)
- Docker Compose: Redis 서비스 추가 및 네트워크 단순화

🎯 해결된 문제:
- 'Incorrect arguments to mysqld_stmt_execute' 오류 해결
- 시놀로지 MySQL 8.0 환경에서 파라미터 바인딩 호환성 문제 해결
- Redis 연결 실패 문제 해결

📋 참고사항:
- MySQL 8.0의 ONLY_FULL_GROUP_BY 모드와 Node.js 드라이버 호환성 문제
- db.execute vs db.query 차이점은 MYSQL_COMPATIBILITY_NOTES.md 참조
2025-11-05 15:18:01 +09:00
Hyungi Ahn
ed40eec261 fix: 그룹 리더 대시보드 작업 저장/삭제 오류 해결 및 작업 분석 시스템 성능 최적화
🔧 그룹 리더 대시보드 수정사항:
- API 호출 방식 수정 (modern-dashboard.js)
- 서버 API 요구사항에 맞는 데이터 구조 변경
- work_entries 배열 구조로 변경
- work_type_id → task_id 필드명 매핑
- 400 Bad Request 오류 해결

 작업 분석 시스템 성능 최적화:
- 중복 함수 제거 (isWeekend, isVacationProject 통합)
- WorkAnalysisAPI 캐싱 시스템 구현 (5분 만료)
- 네임스페이스 조직화 (utils, ui, analysis, render)
- ErrorHandler 통합 에러 처리 시스템
- 성능 모니터링 및 메모리 누수 방지
- GPU 가속 CSS 애니메이션 추가
- 디바운스/스로틀 함수 적용
- 의미 없는 통계 카드 제거

📊 작업 분석 페이지 개선:
- 프로그레스 바 애니메이션
- 토스트 알림 시스템
- 부드러운 전환 효과
- 반응형 최적화
- 메모리 사용량 모니터링
2025-11-05 10:12:52 +09:00
Hyungi Ahn
052e868599 feat: 오류 분석 시스템 완전 재구조화 및 개선
 주요 기능
- Production Report 스타일 오류 분석 테이블 구현
- 작업 형태 중심의 데이터 집계 및 표시
- 프로젝트별 그룹화 (rowspan 적용)
- 연차/휴무 통합 처리 및 주말 제외

📊 테이블 구조 개선
- Job No. → 프로젝트명 표시
- 작업내용 → 작업 형태 (Base, Vessel, Piping Assembly)
- 총 시간 → 작업 형태별 총 시간
- 세부시간 → 정규/오류 유형별 세분화
- 백분율 → 오류율로 변경

🎨 UI/UX 개선
- 프로젝트별 rowspan 그룹화
- 정규(녹색)/오류(빨간색) 시각적 구분
- 연차/휴무 오렌지 색상 테마
- 프로젝트 그룹 경계선 추가

🔧 데이터 처리 로직
- 작업 형태별 오류 데이터 집계
- 오류 유형별 세분화 (설계미스, 발주미스 등)
- 주말 연차/휴무 자동 제외
- 모든 연차/휴무 하나로 통합

🛡️ 안정성 개선
- DOM 요소 null 체크 및 안전한 접근
- 디버깅 로그 추가
- 에러 핸들링 강화
2025-11-05 08:39:35 +09:00
Hyungi Ahn
26f9a4dea2 feat: 프로젝트별 작업 분포 Production Report 스타일 완성
 주요 기능
- 프로젝트별 → 작업유형별 데이터 취합 및 표시
- Production Report 스타일 테이블 구현
- 연차/휴무 별도 처리 (주말 제외, 녹색 테마)
- Job No. 정확한 표시 (중복 제거)

🔧 API 개선
- recent-work API에 job_no 필드 추가
- MySQL 쿼리 결과 처리 수정 (results[0] 사용)
- Projects 테이블 대소문자 조인 문제 해결

🎨 UI/UX 개선
- 탭 기반 분석 인터페이스
- 색상 팔레트 개선 (파란색/녹색/노란색 계열)
- 텍스트 방향 수정 (가로 표시)
- 프로젝트별 합계 행 추가

📊 계산 로직
- 공수: 시간 ÷ 8
- 부하율: (개별 시간 ÷ 전체 시간) × 100%
- 인건비: 공수 × 350,000원
- 주말 연차 자동 제외
2025-11-04 17:52:24 +09:00
Hyungi Ahn
de427c457b feat: 작업 분석 시스템 및 관리 기능 대폭 개선
 새로운 기능:
- 작업 분석 페이지 구현 (기간별, 프로젝트별, 작업자별, 오류별)
- 개별 분석 실행 버튼으로 API 부하 최적화
- 연차/휴무 집계 방식 개선 (주말 제외, 작업내용 통합)
- 프로젝트 관리 시스템 (활성화/비활성화)
- 작업자 관리 시스템 (CRUD 기능)
- 코드 관리 시스템 (작업유형, 작업상태, 오류유형)

🎨 UI/UX 개선:
- 기간별 작업 현황을 테이블 형태로 변경
- 작업자별 rowspan 그룹화로 가독성 향상
- 연차/휴무 프로젝트 하단 배치 및 시각적 구분
- 기간 확정 시스템으로 사용자 경험 개선
- 반응형 디자인 적용

🔧 기술적 개선:
- Rate Limiting 제거 (내부 시스템 최적화)
- 주말 연차/휴무 자동 제외 로직
- 작업공수 계산 정확도 향상
- 데이터베이스 마이그레이션 추가
- API 엔드포인트 확장 및 최적화

🐛 버그 수정:
- projectSelect 요소 참조 오류 해결
- 차트 높이 무한 증가 문제 해결
- 날짜 표시 형식 단순화
- 작업보고서 저장 validation 오류 수정
2025-11-04 16:56:47 +09:00
Hyungi Ahn
746e09420b feat: 캘린더 기반 작업 현황 확인 시스템 구현
- 월별 캘린더 UI로 작업 현황을 한눈에 확인 가능
- 미입력(빨강), 부분입력(주황), 확인필요(보라), 이상없음(초록) 상태 표시
- 범례 아이콘(●)을 사용한 직관적인 상태 표시
- 날짜 클릭 시 해당일 작업자별 상세 현황 모달
- 작업자 클릭 시 개별 작업 입력/수정 모달
- 휴가 처리 기능 (연차, 반차, 반반차, 조퇴)
- 월별 집계 데이터 최적화로 API 호출 최소화

백엔드:
- monthly_worker_status, monthly_summary 테이블 추가
- 자동 집계 stored procedure 및 trigger 구현
- 확인필요(12시간 초과) 상태 감지 로직
- 출석 관리 시스템 확장

프론트엔드:
- 캘린더 그리드 UI 구현
- 상태별 색상 및 아이콘 표시
- 모달 기반 상세 정보 표시
- 반응형 디자인 적용
2025-11-04 10:12:07 +09:00