
    iu	                     d    d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 defdZ G d	 d
      Zy)uB   파이프라인 진행률 추적 — UI에서 폴링하여 표시.    N)datetimetimezone)Optional)Session)PipelineProgressreturnc                  d    t        j                  t        j                        j	                         S N)r   nowr   utc	isoformat     R/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/progress_tracker.py_nowr      s    <<%//11r   c                       e Zd ZdZ	 ddededededdf
dZedefd	       Z	 	 dd
ede	e
   de	e
   ddfdZddZdeddfdZy)ProgressTrackeruS  파이프라인 진행률 추적 — UI에서 폴링하여 표시.

    Usage::

        tracker = ProgressTracker(db, episode_id, "analysis", project_id)
        tracker.update("엔티티 추출 중", 0, 2)
        # ... work ...
        tracker.update("씬 스틸 추출 중", 1, 2)
        # ... work ...
        tracker.complete()
    
db_session
episode_id	operation
project_idr   Nc                    || _         t               }t        t        t	        j
                               |||dddd||
      | _        | j                   j                  | j                         | j                   j                          y )Nrunning r   )
idr   r   r   statuscurrent_steptotal_stepscompleted_steps
started_at
updated_at)	_dbr   r   struuiduuid4	_progressaddcommit)selfr   r   r   r   r   s         r   __init__zProgressTracker.__init__   sk     f)4::< !!
 	T^^$r   c                 .    | j                   j                  S r
   )r&   r   )r)   s    r   progress_idzProgressTracker.progress_id5   s    ~~   r   step	completedtotalc                     || j                   _        ||| j                   _        ||| j                   _        t	               | j                   _        | j                  j                          y)uA   진행 단계 업데이트. 즉시 커밋하여 폴링에 반영.N)r&   r   r   r   r   r!   r"   r(   )r)   r-   r.   r/   s       r   updatezProgressTracker.update9   sP     '+# -6DNN*).DNN&$(F!r   c                     t               }d| j                  _        || j                  _        || j                  _        | j
                  j                          y)u   작업 완료 표시.r.   N)r   r&   r   completed_atr!   r"   r(   )r)   r   s     r   completezProgressTracker.completeH   s;    f +&)#$'!r   errorc                     t               }d| j                  _        t        |      dd | j                  _        || j                  _        | j                  j                          y)u   작업 실패 표시.r5   Ni  )r   r&   r   r#   error_messager!   r"   r(   )r)   r5   r   s      r   failzProgressTracker.failP   sF    f ''*5z%4'8$$'!r   )r   )NN)r   N)__name__
__module____qualname____doc__
OrmSessionr#   r*   propertyr,   r   intr1   r4   r8   r   r   r   r   r      s    
"   	
  
0 !S ! ! $(#	 C= }	
 
# $ r   r   )r<   r$   r   r   typingr   sqlalchemy.ormr   r=   app.models.projectr   r#   r   r   r   r   r   <module>rC      s/    H  '  0 /2c 2F Fr   