# -*- coding: utf-8 -*- """ 전동차 업무 인수인계 및 고장관리 프로그램 메인 진입점 이 프로그램은 전동차 운용실의 24시간 교대 근무 환경에서 업무 인수인계 및 고장관리를 위한 윈도우 데스크톱 애플리케이션입니다. Features: - 지시, 고장, 작업, 기타 섹션 관리 - 일상검수 편성 관리 - 할일 목록 및 메모 - 팀별 확인 체크 - 편성별 고장 이력 조회 Author: 검수팀 Version: 1.0.0 """ import sys from pathlib import Path # 프로젝트 루트를 Python 경로에 추가 project_root = Path(__file__).parent sys.path.insert(0, str(project_root)) from PySide6.QtWidgets import QApplication from PySide6.QtGui import QFont from core.constants import APP_NAME, APP_VERSION, DATA_DIR, LOGS_DIR from core.logger import setup_logger, get_logger, cleanup_old_logs from core.config import ConfigManager def setup_environment(): """ 애플리케이션 환경 설정 필요한 디렉토리를 생성하고 로깅을 초기화합니다. """ # 필요한 디렉토리 생성 DATA_DIR.mkdir(parents=True, exist_ok=True) LOGS_DIR.mkdir(parents=True, exist_ok=True) # 로깅 설정 setup_logger() # 오래된 로그 정리 cleanup_old_logs() def create_application() -> QApplication: """ Qt 애플리케이션 생성 및 설정 Returns: QApplication 인스턴스 """ # High DPI 설정 (Qt6에서는 기본 활성화됨) # 애플리케이션 생성 app = QApplication(sys.argv) # 애플리케이션 정보 설정 app.setApplicationName(APP_NAME) app.setApplicationVersion(APP_VERSION) app.setOrganizationName("검수팀") # 기본 폰트 설정 font = QFont("GmarketSans", 12) app.setFont(font) return app def main(): """ 메인 함수 애플리케이션을 초기화하고 실행합니다. """ # 환경 설정 setup_environment() # 로거 가져오기 logger = get_logger(__name__) logger.info("%s v%s 시작", APP_NAME, APP_VERSION) try: # 설정 로드 config_manager = ConfigManager() logger.info("설정 로드 완료") # 데이터베이스 마이그레이션 실행 try: from database.migrations import run_migrations if run_migrations(): logger.info("데이터베이스 마이그레이션 완료") else: logger.warning("데이터베이스 마이그레이션 실패") except Exception as e: logger.warning(f"마이그레이션 실행 중 오류 발생: {e}") # Qt 애플리케이션 생성 app = create_application() logger.info("애플리케이션 생성 완료") # 메인 윈도우 생성 및 표시 from ui.main_window import MainWindow window = MainWindow(config_manager) window.show() logger.info("메인 윈도우 표시") # 이벤트 루프 시작 exit_code = app.exec() logger.info("%s 종료 (코드: %d)", APP_NAME, exit_code) return exit_code except (RuntimeError, OSError) as e: logger.critical("치명적 오류 발생: %s", e, exc_info=True) return 1 if __name__ == "__main__": sys.exit(main())