Commit Graph

112 Commits

Author SHA1 Message Date
Hyungi Ahn
17843e285f feat: 리비전 관리 시스템 및 구매확정 기능 구현
- 리비전 관리 라우터 및 서비스 추가 (revision_management.py, revision_comparison_service.py, revision_session_service.py)
- 구매확정 기능 구현: materials 테이블에 purchase_confirmed 필드 추가 및 업데이트 로직
- 리비전 비교 로직 구현: 구매확정된 자재 기반으로 신규/변경 자재 자동 분류
- 데이터베이스 스키마 확장: revision_sessions, revision_material_changes, inventory_transfers 테이블 추가
- 구매신청 생성 시 자재 상세 정보 저장 및 purchase_confirmed 자동 업데이트
- 프론트엔드: 리비전 관리 컴포넌트 및 hooks 추가
- 파일 목록 조회 API 추가 (/files/list)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 07:36:44 +09:00
Hyungi Ahn
c258303bb7 🎯 UI/UX 개선 및 안정성 강화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
 주요 개선사항:
- Rev.0일 때 Revisions 카운트 0으로 정확히 표시
- 업로드 후 파일 목록 자동 새로고침
- 대시보드 계정 메뉴 zIndex 문제 해결
- 구매관리 페이지 500 오류 해결 및 대시보드 리다이렉트
- 구매신청 관리 페이지 버튼 텍스트 개선

🔧 기술적 수정:
- purchase_requests API SQL 쿼리 테이블 구조에 맞게 수정
- UserMenu 드롭다운 zIndex 1050으로 상향 조정
- 프론트엔드 완전 재빌드로 최신 변경사항 반영
- 완전한 자동 마이그레이션 시스템 구축 (43개 테이블 스키마 동기화)

🚀 다음 단계: 리비전 기능 재도입 준비 완료
2025-10-21 15:44:43 +09:00
hyungi
edfe1bdf78 feat: 완전한 데이터베이스 스키마 정리 및 테스트 서버 안정화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 43개 테이블로 구성된 완전한 BOM 관리 시스템
- 카테고리별 상세 테이블 (9개): pipe, fitting, flange, valve, gasket, bolt, support, special, instrument
- 사용자 관리 시스템: users, login_logs, user_sessions, user_activity_logs
- 구매 관리 시스템: purchase_requests, purchase_request_items, purchase_items
- 리비전 관리 시스템: material_revisions_comparison, material_comparison_details
- 튜빙 시스템: tubing_categories, tubing_manufacturers, tubing_products, tubing_specifications
- 표준화/분류 시스템: material_standards, material_categories, material_patterns 등
- 권한 관리 시스템: permissions, role_permissions
- 고급 기능: user_requirements, pipe_end_preparations, material_tubing_mapping
- 성능 최적화: materials 테이블 17개 인덱스, GIN/복합/조건부 인덱스
- 데이터 무결성: 외래키 제약으로 일관성 보장
- 확장성: JSONB 활용한 유연한 메타데이터 저장
2025-10-21 12:33:05 +09:00
hyungi
ab607dfa9a feat: 통합 BOM 관리 시스템 구현
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
🎯 주요 변경사항:
- 통합 BOM 페이지 (UnifiedBOMPage) 신규 개발
- 탭 구조로 업로드 → 파일 관리 → 자재 관리 워크플로우 개선
- 컴포넌트 분리로 스파게티 코드 방지

📤 업로드 탭 (BOMUploadTab):
- 드래그 앤 드롭 파일 업로드
- 파일 검증 및 진행률 표시
- 업로드 완료 후 자동 Files 탭 이동

📊 파일 관리 탭 (BOMFilesTab):
- 프로젝트별 BOM 파일 목록 조회
- 리비전 히스토리 표시
- BOM 선택 후 자동 Materials 탭 이동

📋 자재 관리 탭 (BOMMaterialsTab):
- 기존 BOMManagementPage 래핑
- 선택된 BOM의 자재 분류 및 관리

🔧 백엔드 API 개선:
- /files/project/{project_code} 엔드포인트 추가
- 한글 프로젝트 코드 URL 인코딩 지원
- 프로젝트별 파일 조회 기능 구현

🎨 대시보드 개선:
- 3개 BOM 카드를 1개 통합 카드로 변경
- 기능 미리보기 태그 추가
- 더 직관적인 네비게이션

📁 코드 구조 개선:
- 기존 페이지들을 _deprecated 폴더로 이동
- 탭별 컴포넌트 분리 (components/bom/tabs/)
- PAGES_GUIDE.md 업데이트

 사용자 경험 개선:
- 자연스러운 워크플로우 (업로드 → 선택 → 관리)
- 탭 간 상태 공유 및 자동 네비게이션
- 통합된 인터페이스에서 모든 BOM 작업 처리
2025-10-17 14:44:17 +09:00
hyungi
e0ad21bfad feat: SPECIAL/UNCLASSIFIED 카테고리 추가 및 WELD GAP 자동 제외
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
주요 변경사항:
- SPECIAL 카테고리 추가: 특수 제작 품목 관리 (Type, Drawing, Detail1-4)
- UNCLASSIFIED 카테고리 추가: 미분류 자재 원본 그대로 표시
- UNKNOWN → UNCLASSIFIED 통합: 기존 UNKNOWN 카테고리 제거
- WELD GAP 자동 제외: BOM 업로드 시 WELD GAP 항목 자동 필터링

백엔드:
- integrated_classifier.py: UNKNOWN → UNCLASSIFIED 변경, SPECIAL 우선순위 분류
- files.py: parse_dataframe에서 WELD GAP 필터링, UNKNOWN 참조 제거
- exclude_classifier.py: WELD GAP 제외 로직 유지

프론트엔드:
- SpecialMaterialsView.jsx: 특수 제작 품목 관리 컴포넌트
- UnclassifiedMaterialsView.jsx: 미분류 자재 관리 컴포넌트
- BOMManagementPage.jsx: 새 카테고리 추가 및 라우팅
- excelExport.js: SPECIAL/UNCLASSIFIED 엑셀 내보내기 지원
- 모든 UNKNOWN 참조를 UNCLASSIFIED로 변경

기능 개선:
- 저장 기능: 모든 카테고리에 추가요청사항 저장/편집 기능
- P열 납기일 규칙: 모든 카테고리 엑셀 내보내기 통일
- UI 개선: Detail1-4 컬럼명으로 혼동 방지
- 데이터 정리: 모든 프로젝트 및 BOM 데이터 초기화
2025-10-17 13:48:48 +09:00
hyungi
f336b5a4a8 feat: 모든 카테고리에 추가요청사항 저장 기능 및 엑셀 내보내기 개선
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 모든 BOM 카테고리(Pipe, Fitting, Flange, Gasket, Bolt, Support)에 추가요청사항 저장/편집 기능 추가
- 저장된 데이터의 카테고리 변경 및 페이지 새로고침 시 지속성 보장
- 백엔드 materials 테이블에 brand, user_requirement 컬럼 추가
- 새로운 /materials/{id}/brand, /materials/{id}/user-requirement PATCH API 엔드포인트 추가
- 모든 카테고리에서 Additional Request 컬럼 너비 확장 (UI 겹침 방지)
- GASKET 카테고리 엑셀 내보내기에 누락된 '추가요청사항' 컬럼 추가
- 엑셀 내보내기 시 저장된 추가요청사항이 우선 반영되도록 개선
- P열 납기일 규칙 유지하며 관리항목 개수 조정
2025-10-17 12:54:17 +09:00
hyungi
6b6360ecd5 feat: 서포트 카테고리 전면 개선
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 서포트 카테고리 UI 개선: 좌우 스크롤, 헤더/본문 동기화, 가운데 정렬
- 동일 항목 합산 기능 구현 (Type + Size + Grade 기준)
- 헤더 구조 변경: 압력/스케줄 제거, 구매수량 단일화, User Requirements 추가
- 우레탄 블럭슈 두께 정보(40t, 27t) Material Grade에 포함
- 서포트 수량 계산 수정: 취합된 숫자 그대로 표시 (4의 배수 계산 제거)
- 서포트 분류 로직 개선: CLAMP, U-BOLT, URETHANE BLOCK SHOE 등 정확한 분류
- 백엔드 서포트 분류기에 User Requirements 추출 기능 추가
- 엑셀 내보내기에 서포트 카테고리 처리 로직 추가
2025-10-17 07:59:35 +09:00
hyungi
a27213e0e5 feat: 가스켓 카테고리 개선 및 엑셀 내보내기 최적화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 가스켓 카테고리 정렬 오류 수정 (FilterableHeader props 추가)
- 가스켓 엑셀 내보내기 개선:
  * 품목명을 BOM 페이지 타입과 동일하게 표시 (SPIRAL WOUND GASKET 등)
  * 재질을 재질1/재질2로 분리 (SS304/GRAPHITE → 재질1: SS304/GRAPHITE, 재질2: /SS304/SS304)
  * originalDescription에서 4개 재질 패턴 우선 추출
  * P열 납기일 규칙 준수
- 프로젝트 비활성화 기능 수정 (localStorage 영구 저장)
- 모든 카테고리 정렬 함수 안전성 강화
2025-10-16 15:51:24 +09:00
hyungi
379af6b1e3 fix: 엑셀 내보내기 구조 개선 - 파이프 카테고리 우선 적용
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 모든 카테고리에서 '단위' 컬럼 제거 (수량만 사용)
- 파이프 카테고리: 납기일이 정확히 P열에 위치하도록 수정
- 파이프 전용 컬럼 구조: 크기, 스케줄, 재질, 제조방법, 사용자요구, 추가요청사항, 관리항목1~4
- createExcelBlob 함수에서 ExcelJS → XLSX 변경으로 오류 해결
- 백엔드 EXCEL_DIR 경로 수정 (exports → uploads/excel_exports)
- BOM에서 생성한 엑셀을 구매관리에서 동일하게 다운로드 가능

배포 버전: index-c08dc565.js
다음 단계: 피팅, 플랜지 카테고리 엑셀 구조 개선
2025-10-16 15:13:42 +09:00
hyungi
a5bfeec9aa feat: 엑셀 다운로드 방식 개선 - BOM에서 생성한 엑셀을 구매관리에서 다운로드
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 파이프, 피팅, 플랜지, 밸브 카테고리에 새로운 엑셀 업로드 로직 적용
- createExcelBlob 함수로 클라이언트에서 엑셀 생성 후 서버 업로드
- /purchase-request/upload-excel API로 엑셀 파일 서버 저장
- 구매관리 페이지에서 원본 엑셀 파일 다운로드 가능
- 가스켓, 볼트, 서포트는 추후 개선 시 적용 예정

배포 버전: index-5e5aa4a4.js
2025-10-16 14:53:22 +09:00
hyungi
c7297c6fb7 feat: 피팅류 엑셀 내보내기 개선 및 프로젝트 비활성화 버그 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
 피팅류 엑셀 내보내기 개선:
- 품목명에 상세 피팅 타입 표시 (SOCK-O-LET, ELBOW 90° LR 등)
- G열부터 압력등급/스케줄/재질/사용자요구/추가요청사항 체계적 배치
- 분류기 추출 요구사항(J열)과 사용자 입력 요구사항(K열) 분리
- P열 납기일 고정 규칙 유지, 관리항목 자동 채움

🐛 프로젝트 비활성화 버그 수정:
- 백엔드: job_no 필드 추가로 프론트엔드 호환성 확보
- 프론트엔드: 안전한 프로젝트 식별자 처리 로직 구현
- 개별 프로젝트 비활성화 시 전체 프로젝트 영향 문제 해결
- 디버깅 로그 추가로 상태 변경 추적 가능

🔧 기타 개선사항:
- BOM 페이지 이모지 제거
- 구매신청 후 자재 비활성화 기능 구현
- 모든 카테고리 뷰에 onPurchasedMaterialsUpdate 콜백 추가
2025-10-16 14:00:44 +09:00
hyungi
22baea38e1 feat: BOM 페이지 개선 및 구매관리 기능 향상
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- BOM 페이지에서 모든 카테고리 이모지 제거 (깔끔한 UI)
- 구매신청된 자재 비활성화 기능 개선
- 구매관리 페이지에서 선택된 프로젝트만 표시하도록 수정
- 파이프 카테고리 Excel 내보내기 개선:
  * 끝단처리, 압력등급 컬럼 제거
  * 사용자요구(분류기 추출) 및 추가요청사항 컬럼 추가
  * 품목명에서 끝단처리 정보 제거
  * 납기일 P열 고정 및 관리항목 자동 채움
- 파이프 분류기에서 사용자 요구사항 추출 기능 추가
- 재질별 스케줄 표시 개선 (SUS: SCH 40S, Carbon: SCH 40)
2025-10-16 13:27:14 +09:00
hyungi
64fd9ad3d2 feat: BOM 관리 시스템 대폭 개선 및 Docker 배포 가이드 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 🎨 UI/UX 개선: 데본씽크 스타일 모던 디자인 적용
- 📁 컴포넌트 구조 개선: 폴더별 체계적 관리 (common/, bom/, materials/)
- 🔧 BOM 관리 페이지 리팩토링: NewMaterialsPage → BOMManagementPage + 카테고리별 컴포넌트 분리
- 💾 구매신청 기능 개선: 선택된 자재 비활성화, 제목 편집, 엑셀 다운로드
- 📊 자재 표시 개선: 타입/서브타입 컬럼 정리, 상세 정보 복원
- 🐛 CSS 빌드 오류 수정: NewMaterialsPage.css 문법 오류 해결
- 📚 문서화: PAGES_GUIDE.md 추가, README에 Docker 캐시 문제 해결 가이드 추가
- 🔄 API 개선: 구매신청 자재 조회, 제목 수정 엔드포인트 추가
2025-10-16 12:45:23 +09:00
hyungi
5aef867110 🔧 구매신청 관리 페이지 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 업로드 당시 분류된 정보를 그대로 표시하도록 수정
- 복잡한 BOM 페이지 스타일 분류 로직 제거
- 간단하고 안정적인 테이블 형태로 자재 목록 표시
- 카테고리별 그룹화 유지하되 에러 방지를 위해 단순화

 해결된 문제:
- 구매신청 페이지에서 몇몇 항목이 깨지던 문제 해결
- 업로드 당시 정보를 그대로 보여주도록 개선
2025-10-16 07:11:50 +09:00
hyungi
ee13e92b61 📊 엑셀 내보내기 개선 완료
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
 개선 사항:
- 품목명에 상세 타입 정보 포함 (빠짐없이)
- 타입 컬럼 제거 (중복 방지)
- 납기일을 항상 P열에 고정
- 남는 공간을 관리항목1부터 채우기

🔧 상세 개선:
- ELBOW: 각도(90°/45°), 반경(LR/SR), 연결방식(SW/BW) 표시
- FLANGE: 풀네임 + 끝단처리 정보 포함
- 모든 카테고리에서 타입 컬럼 제거하고 품목명에 통합
- P열 납기일 고정, 관리항목으로 빈 공간 채우기
2025-10-16 07:08:19 +09:00
hyungi
5e995d1208 🔧 REDUCING FLANGE 분류 로직 강화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 다양한 REDUCING FLANGE 패턴 대응 (REDUCING FLANGE, RED FLANGE, REDUCER FLANGE 등)
- FLANGE + REDUCING 조합 키워드 감지 로직 추가
- 우선순위 검사 강화로 FITTING 분류 오류 방지
- 원인: REDUCER 키워드로 인한 FITTING 분류 문제 해결
2025-10-16 07:02:14 +09:00
hyungi
f1e1fb6475 🔧 피팅 분류 및 표시 개선 완료
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
 주요 개선사항:
• 엘보 90도/45도 각도 표시 개선 (ELBOW 90° LR BW 형태)
• RL/SL (Long/Short Radius) 표시 추가
• 엘보 서브타입 분류 로직 강화 (90DEG_LONG_RADIUS, 90DEG_SHORT_RADIUS)
• REDUCING FLANGE 분류 개선 (RED 키워드 제거로 피팅 오분류 방지)
• 구매신청 엑셀 중복 생성 문제 해결

🎯 분류기 개선:
• fitting_classifier.py: 엘보 조합 키워드 우선 확인 로직 추가
• integrated_classifier.py: FITTING 키워드에서 RED 제거
• NewMaterialsPage.jsx: 엘보 상세 표시 로직 개선

📊 테스트 완료:
• 엘보 각도 및 반경 정보 정확 표시
• REDUCING FLANGE → FLANGE 분류 확인
• 구매신청 엑셀 단일 생성 확인
2025-10-16 06:52:38 +09:00
hyungi
c3ebb38669 Merge commit 'b944292'
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
2025-10-15 17:43:25 +09:00
hyungi
b9442928da 🔧 자재 분류기 개선 및 ELL 키워드 분류 문제 해결 (테스트 필요 - 안되는거 같음)
분류기 개선사항:
1. ELL-O-LET vs 일반 엘보 분류 개선
   - OLET 우선순위 확인 로직 추가
   - ELL 키워드 충돌 문제 해결

2. 엘보 서브타입 강화
   - 90DEG_LONG_RADIUS, 90DEG_SHORT_RADIUS 등 조합형 추가
   - 더 구체적인 키워드 패턴 지원

3. 레듀스 플랜지 분류 개선
   - REDUCING FLANGE가 FITTING이 아닌 FLANGE로 분류되도록 수정
   - 특별 우선순위 로직 추가

4. 90 ELL SW 분류 문제 해결
   - fitting_keywords에 ELL 키워드 추가
   - ELBOW description_keywords에 ELL, 90 ELL, 45 ELL 추가

기술적 개선:
- 키워드 우선순위 체계 강화
- 구체적인 패턴 매칭 개선
- 분류 신뢰도 향상

플랜지 카테고리 개선:
- 타입 풀네임 표시 (WN → WELD NECK FLANGE)
- 끝단처리 별도 컬럼 추가 (RF → RAISED FACE)
- 엑셀 내보내기 구조 개선 (P열 납기일, 관리항목 4개)
2025-10-15 17:43:10 +09:00
hyungi
e799aae71b feat: 오늘 6시간 작업 내용 복구 완료
- 엑셀 내보내기 개선: 납기일 P열 이동, 관리항목 4개로 축소
- J24-001 더미 프로젝트 옵션 제거
- CORS 오류 해결: API URL /api로 통일
- BOM 페이지 수정사항 포함
- 트랜잭션 오류 해결 시도
2025-10-15 13:55:25 +09:00
hyungi
b10bd8d01c temp: 현재 변경사항 임시 저장 2025-10-15 13:54:46 +09:00
hyungi
9725331af0 fix: 트랜잭션 오류 해결 및 CORS 오류 수정
- 리비전 업로드 시 InFailedSqlTransaction 오류 해결
- 트랜잭션 롤백 및 새 세션 생성 로직 추가
- 특정 쿼리 실행 전 트랜잭션 롤백 처리
- API URL을 /api로 통일하여 CORS 오류 해결
- J24-001 더미 프로젝트 옵션 완전 제거
2025-10-15 13:45:20 +09:00
Hyungi Ahn
8f5330a008 feat: BOM과 구매관리 페이지 엑셀 통합 및 완전 동일화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
엑셀 내보내기 통합:
- BOM 페이지: 구매신청 시 백엔드에서 엑셀 파일 생성 및 저장
- 구매관리 페이지: 저장된 엑셀 파일 직접 다운로드 (재생성 안 함)
- 두 페이지에서 완전히 동일한 엑셀 파일 제공

백엔드 엑셀 생성:
- openpyxl 사용하여 서버에서 엑셀 생성
- 카테고리별 시트 구성
- 헤더 스타일링 (연파랑 배경)
- 컬럼 너비 자동 조정

FLANGE 품목명 개선:
- 품목명: FLANGE (간단)
- 상세내역: WELD NECK RF, SLIP-ON RF 등 (전체 이름)
- 특수 플랜지: ORIFICE FLANGE, SPECTACLE BLIND 등 구분

구매신청 관리 API 개선:
- 상세 정보 포함 (pipe_details, fitting_details, flange_details 등)
- BOM 형식과 동일한 데이터 구조
- 수량 정수 변환 (3.000 → 3)

에러 수정:
- fileName 중복 선언 해결
- flange_details.connection_method 컬럼 제거 (존재하지 않음)
- Python 문법 오류 수정 (new Date() → datetime.now())

DB 스키마 개선:
- revision_status 컬럼 추가 및 크기 조정 (VARCHAR(30))
- 리비전 변경사항 추적 지원
2025-10-14 15:59:33 +09:00
Hyungi Ahn
72126ef78d fix: 구매신청 엑셀 수량 표시 개선 및 FLANGE 품목명 개선
- 구매신청 관리 페이지 수량을 정수로 표시 (3.000 EA → 3 EA)
- JSON 저장 시 수량 정수 변환
- FLANGE 품목명 세분화: WN RF, SO RF, ORIFICE FLANGE, SPECTACLE BLIND 등
- 구매관리 페이지 엑셀 다운로드 데이터 구조 개선
- 디버그 로그 추가
2025-10-14 15:29:01 +09:00
Hyungi Ahn
5a21ef8f6c feat: 리비전 관리 시스템 완전 개편
변동이력 관리로 전환:
- 도면번호 기준 변경 추적
- 리비전 업로드 시 전체 자재 저장 (차이분만 저장 방식 폐지)
- 구매신청 정보 수량 기반 상속

리비전 변경 감지:
- 수량/재질/크기/카테고리 변경 감지
- 변경 유형: specification_changed, quantity_changed, added, removed
- 도면별 변경사항 추적

누락 도면 처리:
- 리비전 업로드 시 누락된 도면 자동 감지
- 3가지 선택 옵션: 일부 업로드 / 도면 삭제 / 취소
- 구매신청 여부에 따라 다른 처리 (재고품 vs 숨김)

자재 상태 관리:
- revision_status 컬럼 추가 (active/inventory/deleted_not_purchased/changed)
- 재고품: 연노랑색 배경, '재고품' 배지
- 변경됨: 파란색 테두리, '변경됨' 배지
- 삭제됨: 자동 숨김

구매신청 정보 상속:
- 수량 기반 상속 (그룹별 개수만큼만)
- Rev.0에서 3개 구매 → Rev.1에서 처음 3개만 상속, 추가분은 미구매
- 도면번호 정확히 일치하는 경우에만 상속

기타 개선:
- 구매신청 관리 페이지 수량 표시 개선 (3 EA, 소수점 제거)
- 도면번호/라인번호 파싱 및 저장 (DWG_NAME, LINE_NUM 컬럼)
- SPECIAL 카테고리 도면번호 표시
- 마이그레이션 스크립트 추가 (29_add_revision_status.sql)
2025-10-14 14:30:34 +09:00
Hyungi Ahn
e27020ae9b feat: 구매신청 기능 완성 및 SUPPORT/SPECIAL 카테고리 개선
- 모든 카테고리 구매신청 기능 완성 (PIPE, FITTING, VALVE, FLANGE, GASKET, BOLT, SUPPORT, SPECIAL, UNKNOWN)
- 구매신청 완료 항목: 회색 배경, 체크박스 비활성화, '구매신청완료' 배지 표시
- 전체 선택/구매신청 시 이미 구매신청된 항목 자동 제외
- 구매신청 quantity 타입 에러 수정 (문자열 -> 정수 변환)

SUPPORT 카테고리 (구 U-BOLT):
- U-BOLT -> SUPPORT로 카테고리명 변경
- 클램프, 유볼트, 우레탄블럭슈 분류 개선
- 테이블 헤더: 선택-종류-타입-크기-디스크립션-추가요구-사용자요구-수량
- 크기 정보 main_nom 필드에서 가져오기 (배관 인치)
- 엑셀 내보내기 형식 조정

SPECIAL 카테고리:
- SPECIAL 키워드 자재 자동 분류 (SPECIFICATION 제외)
- 파일 업로드 시 SPECIAL 카테고리 처리 로직 추가
- 도면번호 필드 추가 (drawing_name, line_no)
- 타입 필드: 크기/스케줄/재질 제외한 핵심 정보 표시
- 엑셀 DWG_NAME, LINE_NUM 컬럼 파싱 및 저장

FITTING 카테고리:
- 테이블 컬럼 너비 조정 (선택 2%, 종류 8.5%, 수량 12%)

구매신청 관리:
- 엑셀 재다운로드 형식 개선 (BOM 페이지와 동일한 형식)
- 그룹화된 자재 정보 포함하여 저장 및 다운로드
2025-10-14 12:39:25 +09:00
Hyungi Ahn
e468663386 🔧 User 모델 ID 필드명 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- id → user_id (실제 User 모델의 primary key)
- 모든 참조를 user_id로 통일
- 회원가입 완전 수정 완료
2025-10-14 07:43:56 +09:00
Hyungi Ahn
745ecaf3a3 🔧 거부 쿼리 user_id 컬럼명 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- id → user_id
- access_level='pending' → is_active=FALSE
- 모든 쿼리가 실제 DB 스키마에 맞춤
2025-10-14 07:42:51 +09:00
Hyungi Ahn
5a3ee33e9b 🔧 승인 대기 로직 수정 - is_active=False 사용
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- access_level='pending' 대신 is_active=False 사용
- access_level='worker'로 설정 (승인 시 변경 가능)
- 승인 대기 쿼리: is_active=FALSE로 조회
- 승인 쿼리: user_id 컬럼명 수정
- 거부 쿼리도 user_id 기준으로 수정 필요

로그인 제한:
- 로그인 API에서 이미 is_active 체크 중
- 비활성 계정은 로그인 불가
- 관리자 승인 후에만 로그인 가능
2025-10-14 07:42:14 +09:00
Hyungi Ahn
b1bfd1a4c0 🔧 User 모델 필드명 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- hashed_password → password
- User 모델의 실제 필드명에 맞춤
- 회원가입 기능 최종 수정
2025-10-14 07:38:58 +09:00
Hyungi Ahn
39917be585 🔧 create_user 파라미터를 딕셔너리로 변경
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- create_user(user_data: Dict) 형식에 맞춤
- 키워드 인자 → 딕셔너리로 변경
- 회원가입 기능 정상 작동
2025-10-14 07:37:02 +09:00
Hyungi Ahn
50eab5ac5f 🔧 비밀번호 해싱을 bcrypt로 직접 처리
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- AuthService.hash_password() 메서드가 없어서 직접 bcrypt 사용
- bcrypt.hashpw()로 비밀번호 해싱
- 회원가입 기능 정상 작동
2025-10-14 07:35:15 +09:00
Hyungi Ahn
fb46902b85 🔧 AuthService db 파라미터 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- AuthService() → AuthService(db)
- 회원가입 기능 정상 작동
2025-10-14 07:33:20 +09:00
Hyungi Ahn
e50f0887ad 🔧 UserRepository 메서드명 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- get_user_by_username → find_by_username
- 실제 models.py의 메서드명에 맞춤
- 회원가입 기능 정상 작동
2025-10-14 07:30:56 +09:00
Hyungi Ahn
e14f8b69c7 회원가입 신청 기능 완성 (간소화)
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
백엔드:
- signup_routes.py 신규 생성
- POST /auth/signup-request: 회원가입 신청
- GET /auth/signup-requests: 승인 대기 목록 (관리자)
- POST /auth/approve-signup/{id}: 승인 (관리자)
- DELETE /auth/reject-signup/{id}: 거부 (관리자)
- main.py에 signup_router 등록

프론트엔드:
- SimpleLogin에 회원가입 폼 추가
- 필수 항목만: 사용자명, 비밀번호, 비밀번호 확인, 이름
- 간단하고 깔끔한 UI
- 비밀번호 일치 검사 및 최소 길이 검사
- 제출 후 승인 대기 안내 메시지
2025-10-14 07:28:06 +09:00
Hyungi Ahn
dfb6c7e8a4 🔧 ActivityLogger 호출 제거
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- log_activity() 파라미터 오류로 임시 제거
- TODO로 표시하여 추후 올바른 방식으로 구현
- 프로젝트 생성/수정 기능은 정상 작동
2025-10-14 07:17:51 +09:00
Hyungi Ahn
6d8bb468c3 프로젝트 생성 및 관리 기능 완성
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
백엔드:
- POST /dashboard/projects 엔드포인트 추가
- 프로젝트 생성 기능 구현
- 중복 코드 검사
- GET /dashboard/projects 컬럼명 수정 (실제 DB 스키마에 맞춤)
- PATCH /dashboard/projects/{id} 컬럼명 수정

프론트엔드:
- 메인 대시보드에 프로젝트 관리 섹션 추가
- ' 새 프로젝트' 버튼으로 생성 폼 표시/숨김
- '✏️ 이름 수정' 버튼으로 프로젝트 이름 수정
- 프로젝트 생성 폼:
  - 프로젝트 코드 (필수)
  - 프로젝트 이름 (필수)
  - 고객사명 (선택)
- 실시간 프로젝트 목록 갱신
- API 연동 완료
2025-10-14 07:14:55 +09:00
Hyungi Ahn
003983872c 성능 대폭 개선 - parseMaterialInfo 캐싱
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
백엔드:
- GET /dashboard/projects 엔드포인트 추가
- 프로젝트 목록 조회 API 구현

프론트엔드:
- parseMaterialInfo 결과를 useMemo로 캐싱
- parsedMaterialsMap으로 중복 계산 방지
- getParsedInfo() 함수로 캐시된 값 사용
- 성능 개선: 1315개 자재 × 6번 계산 → 1315개 자재 × 1번 계산
- 약 80% 계산 감소 (8000번 → 1500번)

효과:
- 페이지 로딩 속도 대폭 향상
- 메모리 사용량 감소
- 필터/정렬 기능 유지하면서 가벼워짐
2025-10-14 07:06:24 +09:00
Hyungi Ahn
a55e2e1c37 🚨 긴급: 에러 로거 무한 루프 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- errorLogger.js에서 무한 루프 발생
- 원인: API 에러 → localStorage 저장 실패 → 서버 전송 실패 → 또 에러 발생
- 해결: errorLogger 완전 비활성화
- setupGlobalErrorHandlers() 비활성화

사용자 조치 필요:
브라우저 개발자 도구(F12) > Application > Local Storage > localhost:13000 > Clear All
2025-10-14 07:00:13 +09:00
Hyungi Ahn
433d894175 ✏️ 메인 대시보드에 프로젝트 이름 수정 기능 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- App.jsx dashboard에 프로젝트 이름 수정 기능 구현
- 프로젝트 선택 시 '✏️ 이름 수정' 버튼 표시
- 실제 API에서 프로젝트 목록 로드 (더미 데이터는 fallback)
- 편집 폼: 파란색 박스로 명확하게 구분
- Enter 키로 빠른 저장
- 💾 저장 / ✕ 취소 버튼
- 저장 후 드롭다운 자동 갱신
2025-10-14 06:58:14 +09:00
Hyungi Ahn
aca00cf3cb ✏️ JobSelectionPage에 프로젝트 이름 수정 기능 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 선택된 프로젝트 옆에 '✏️ 수정' 버튼 추가
- 수정 버튼 클릭 시 편집 폼 표시
- 입력 필드 + 저장/취소 버튼
- Enter 키로 저장 가능
- API 연동: PATCH /dashboard/projects/{id}
- 실시간 업데이트: 드롭다운 목록 및 선택된 이름 자동 갱신
- 간단하고 직관적인 UX
2025-10-14 06:51:45 +09:00
Hyungi Ahn
ca0336d627 ✏️ 프로젝트 이름 인라인 편집 기능 추가
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
백엔드:
- dashboard.py에 PATCH /dashboard/projects/{id} 엔드포인트 추가
- 프로젝트 이름 업데이트 기능 구현
- 활동 로그 기록

프론트엔드:
- ProjectsPage에 인라인 편집 기능 추가
- 더블클릭으로 편집 모드 진입
- Enter 키로 저장, Escape로 취소
- 저장/취소 버튼 (✓/✕) 제공
- 간단하고 직관적인 UX
2025-10-14 06:47:52 +09:00
Hyungi Ahn
9325d36031 메모리 성능 최적화 - 필터 계산 제한
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- FilterableHeader의 uniqueValues 계산을 최대 200개로 제한
- 메모리 누수 방지: 대량 자재(1000개+)에서 무거운 계산 반복 방지
- parseMaterialInfo 호출 횟수 대폭 감소
- 페이지 리로드 문제 해결
2025-10-14 06:44:18 +09:00
Hyungi Ahn
07ca79f376 🔄 SUPPORT 카테고리를 U-BOLT로 통합
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- DB: SUPPORT 카테고리 76개 자재를 U_BOLT로 변경 (총 211개)
- 프론트엔드: SUPPORT 표시명을 'U-BOLT'로 변경
- SUPPORT 전용 헤더 및 본문 렌더링 제거
- U_BOLT 렌더링 개선:
  - U-BOLT: 기본 표시
  - URETHANE: 우레탄 블록 슈
  - CLAMP: 클램프 (신규 추가)
- CLAMP 배지 스타일 추가 (청록색)
2025-10-14 06:37:00 +09:00
Hyungi Ahn
e8fb531fdb 🎯 선택 컬럼 대폭 축소 - 경계선 위치 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 선택: 3.5% → 2% (체크박스에 딱 맞게)
- 종류: 6.5% → 8% (배지 표시 공간 확보)
- 본문의 border-right가 선택 컬럼 끝에 위치하도록 조정
- 모든 카테고리에 일괄 적용
2025-10-13 15:58:02 +09:00
Hyungi Ahn
e45bcf12c0 🔧 선택/종류 컬럼 비율 재조정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 선택: 2.5% → 3.5% (체크박스 공간 확보)
- 종류: 7.5% → 6.5% (배지 크기에 맞게 축소)
- 모든 카테고리에 일괄 적용
2025-10-13 15:55:00 +09:00
Hyungi Ahn
48b100d0d4 🔧 PIPE 수량 셀 단순화 - wrapper div 제거
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- quantity-info, quantity-details wrapper 제거
- 단순 span으로 변경하여 grid 구조 정상화
- 추가 정보(단관 개수, 길이)는 제거
- 이제 헤더와 본문이 완벽히 정렬됨
2025-10-13 15:52:35 +09:00
Hyungi Ahn
f1fe614977 테이블 정렬 완료 - 백분율 기반 컬럼 너비
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 모든 카테고리의 컬럼을 백분율(%)로 통일
- 선택: 2.5%, 종류: 7.5%로 최적화
- 화면 너비에 맞게 꽉 차도록 표시
- 헤더와 본문이 완벽하게 정렬됨
- 엑셀과 유사한 깔끔한 테이블 완성
2025-10-13 15:50:55 +09:00
Hyungi Ahn
e3d0c4d9a0 💯 컬럼 너비를 백분율로 변경 - 화면 꽉 차게 표시
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 모든 고정 픽셀 너비를 백분율(%)로 변경
- 화면 너비에 맞게 테이블이 꽉 차도록 설정
- overflow-x: hidden으로 가로 스크롤 제거
- 헤더와 본문이 정확히 동일한 백분율 사용
- 예: PIPE 9개 컬럼 = 5% 8% 12% 8% 10% 20% 12% 15% 10%
- 이제 어떤 화면 크기에서도 헤더와 본문이 완벽히 정렬됨
2025-10-13 15:44:51 +09:00
Hyungi Ahn
5a9274d42b 🔧 테이블 border 구조 수정 - 양쪽 테두리 통일
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled
- 헤더 행의 border-left, border-right 제거
- 본문 행의 border-left, border-right 제거
- 대신 첫/마지막 셀에 border 적용으로 통일
- materials-grid의 외곽 border가 전체를 감쌈
- 불필요한 이중 border 제거
2025-10-13 15:41:58 +09:00