refactor(tkeg): print→logging 교체 + 레거시 파일 정리 (-5,447줄)

- 6개 파일 디버그 print문 102건 → logger.info/warning/error 교체
- DashboardPage.old.jsx 삭제 (미사용)
- NewMaterialsPage.jsx/css 삭제 (dead import)
- spool_manager_v2.py 삭제 (미사용)
- App.jsx dead import 제거
- main.py 구 주석 블록 제거

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-26 15:41:39 +09:00
parent d6dd03a52f
commit 1ceeef2a65
12 changed files with 62 additions and 5447 deletions

View File

@@ -201,26 +201,26 @@ async def upload_file(
# 🎯 트랜잭션 오류 방지: 완전한 트랜잭션 초기화
# 🔍 디버깅: 업로드 파라미터 로깅
print(f"🔍 [UPLOAD] job_no: {job_no}, revision: {revision}, parent_file_id: {parent_file_id}")
print(f"🔍 [UPLOAD] bom_name: {bom_name}, filename: {file.filename}")
print(f"🔍 [UPLOAD] revision != 'Rev.0': {revision != 'Rev.0'}")
logger.info(f"[UPLOAD] job_no: {job_no}, revision: {revision}, parent_file_id: {parent_file_id}")
logger.info(f"[UPLOAD] bom_name: {bom_name}, filename: {file.filename}")
logger.info(f"[UPLOAD] revision != 'Rev.0': {revision != 'Rev.0'}")
try:
# 1. 현재 트랜잭션 완전 롤백
db.rollback()
print("🔄 1단계: 이전 트랜잭션 롤백 완료")
logger.info("1단계: 이전 트랜잭션 롤백 완료")
# 2. 세션 상태 초기화
db.close()
print("🔄 2단계: 세션 닫기 완료")
logger.info("2단계: 세션 닫기 완료")
# 3. 새 세션 생성
from ..database import get_db
db = next(get_db())
print("🔄 3단계: 새 세션 생성 완료")
logger.info("3단계: 새 세션 생성 완료")
except Exception as e:
print(f"⚠️ 트랜잭션 초기화 중 오류: {e}")
logger.warning(f"트랜잭션 초기화 중 오류: {e}")
# 오류 발생 시에도 계속 진행
# [변경] BOMParser 사용하여 확장자 검증
@@ -245,10 +245,10 @@ async def upload_file(
try:
# [변경] BOMParser 사용하여 파일 파싱 (자동 양식 감지 포함)
print(f"🚀 파일 파싱 시작: {file_path}")
logger.info(f"파일 파싱 시작: {file_path}")
materials_data = BOMParser.parse_file(str(file_path))
parsed_count = len(materials_data)
print(f"파싱 완료: {parsed_count}개 자재 추출됨")
logger.info(f"파싱 완료: {parsed_count}개 자재 추출됨")
# 신규 자재 카운트 초기화
new_materials_count = 0
@@ -256,7 +256,7 @@ async def upload_file(
# 리비전 업로드인 경우만 자동 리비전 생성 및 기존 자재 조회
if parent_file_id is not None:
print(f"🔄 리비전 업로드 감지: parent_file_id={parent_file_id}")
logger.info(f"리비전 업로드 감지: parent_file_id={parent_file_id}")
# 부모 파일의 정보 조회
parent_query = text("""
SELECT original_filename, revision, bom_name FROM files
@@ -299,10 +299,10 @@ async def upload_file(
else:
revision = "Rev.1"
print(f"리비전 업로드: {latest_rev} {revision}")
logger.info(f"리비전 업로드: {latest_rev} -> {revision}")
else:
revision = "Rev.1"
print(f"첫 번째 리비전: {revision}")
logger.info(f"첫 번째 리비전: {revision}")
# 모든 이전 리비전의 누적 자재 목록 조회 (리비전 0부터 현재까지)
existing_materials_query = text("""
@@ -327,24 +327,24 @@ async def upload_file(
existing_materials_descriptions.add(key)
existing_materials_with_quantity[key] = float(row.total_quantity or 0)
print(f"📊 누적 자재 수 (Rev.0~현재): {len(existing_materials_descriptions)}")
print(f"📊 누적 자재 총 수량: {sum(existing_materials_with_quantity.values())}")
logger.info(f"누적 자재 수 (Rev.0~현재): {len(existing_materials_descriptions)}")
logger.info(f"누적 자재 총 수량: {sum(existing_materials_with_quantity.values())}")
if len(existing_materials_descriptions) > 0:
print(f"📝 기존 자재 샘플 (처음 3개): {list(existing_materials_descriptions)[:3]}")
logger.info(f"기존 자재 샘플 (처음 3개): {list(existing_materials_descriptions)[:3]}")
# 수량이 있는 자재들 확인
quantity_samples = [(k, v) for k, v in list(existing_materials_with_quantity.items())[:3]]
print(f"📊 기존 자재 수량 샘플: {quantity_samples}")
logger.info(f"기존 자재 수량 샘플: {quantity_samples}")
else:
print(f"⚠️ 기존 자재가 없습니다! parent_file_id={parent_file_id}의 materials 테이블을 확인하세요.")
logger.warning(f"기존 자재가 없습니다! parent_file_id={parent_file_id}의 materials 테이블을 확인하세요.")
# 파일명을 부모와 동일하게 유지
file.filename = parent_file[0]
else:
# 일반 업로드 (새 BOM)
print(f"일반 업로드 모드: 새 BOM 파일 (Rev.0)")
logger.info(f"일반 업로드 모드: 새 BOM 파일 (Rev.0)")
# 파일 정보 저장 (사용자 정보 포함)
print("DB 저장 시작")
logger.info("DB 저장 시작")
username = current_user.get('username', 'unknown')
user_id = current_user.get('user_id')
@@ -370,7 +370,7 @@ async def upload_file(
file_id = file_result.fetchone()[0]
db.commit() # 파일 레코드 즉시 커밋
print(f"파일 저장 완료: file_id = {file_id}, uploaded_by = {username}")
logger.info(f"파일 저장 완료: file_id = {file_id}, uploaded_by = {username}")
# 🔄 리비전 비교 수행 (RULES.md 코딩 컨벤션 준수)
revision_comparison = None
@@ -378,23 +378,23 @@ async def upload_file(
purchased_materials_map = {} # 구매확정된 자재 매핑 (키 -> 구매확정 정보)
if revision != "Rev.0": # 리비전 업로드인 경우만 비교
print(f"🔍 [DEBUG] 리비전 비교 시작 - revision: {revision}, parent_file_id: {parent_file_id}")
logger.info(f"[DEBUG] 리비전 비교 시작 - revision: {revision}, parent_file_id: {parent_file_id}")
try:
# 간단한 리비전 비교 로직 (purchase_confirmed 기반)
print(f"🔍 [DEBUG] perform_simple_revision_comparison 호출 중...")
logger.info(f"[DEBUG] perform_simple_revision_comparison 호출 중...")
revision_comparison = perform_simple_revision_comparison(db, job_no, parent_file_id, materials_data)
print(f"🔍 [DEBUG] 리비전 비교 완료: {revision_comparison.keys() if revision_comparison else 'None'}")
logger.info(f"[DEBUG] 리비전 비교 완료: {revision_comparison.keys() if revision_comparison else 'None'}")
if revision_comparison.get("has_purchased_materials", False):
print(f"📊 간단한 리비전 비교 결과:")
print(f" - 구매확정된 자재: {revision_comparison.get('purchased_count', 0)}")
print(f" - 미구매 자재: {revision_comparison.get('unpurchased_count', 0)}")
print(f" - 신규 자재: {revision_comparison.get('new_count', 0)}")
print(f" - 제외된 구매확정 자재: {revision_comparison.get('excluded_purchased_count', 0)}")
logger.info(f"간단한 리비전 비교 결과:")
logger.info(f" - 구매확정된 자재: {revision_comparison.get('purchased_count', 0)}")
logger.info(f" - 미구매 자재: {revision_comparison.get('unpurchased_count', 0)}")
logger.info(f" - 신규 자재: {revision_comparison.get('new_count', 0)}")
logger.info(f" - 제외된 구매확정 자재: {revision_comparison.get('excluded_purchased_count', 0)}")
# 신규 및 변경된 자재만 분류
materials_to_classify = revision_comparison.get("materials_to_classify", [])
print(f" - 분류 필요: {len(materials_to_classify)}")
logger.info(f" - 분류 필요: {len(materials_to_classify)}")
# 🔥 구매확정된 자재 매핑 정보 저장
purchased_materials_map = revision_comparison.get("purchased_materials_map", {})