handOver2/main.py

129 lines
3.4 KiB
Python

# -*- 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())