
    Ui              	       F   d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZmZmZ ddlmZ ddlmZmZmZ  ed	d
g          Ze                    d          defd            Ze                    d          defd            Ze                    d          defd            Ze                    d          defd            Ze                    d          	 	 ddedee         dee         fd            Ze                    d          d             Z dS )u*  
==============================================================================
Goalskill 라우터 - 분류 알고리즘 API 엔드포인트
==============================================================================
테스트/디버그 및 외부 파트에서도 HTTP로 호출 가능한 API.
    )	APIRouterHTTPException)	BaseModel)LiteralOptional)classify_and_saveclassify_only)get_from_goalskill_tableget_all_goalskill_dataget_talk_countVALID_TABLES)logger)ClassifyAndSaveRequestClassifyOnlyRequestTableQueryRequestz
/goalskillzGoalskill Classifier)prefixtagsz/classify-saverequestc                    K   	 t          | j        | j        | j        | j                   d{V }|S # t
          $ r:}t          j        d|            t          dt          |                    d}~ww xY w)u   
    INPUT 데이터를 분류하고 Goalskill_DB에 저장.

    - sender, part는 호출 시 전달
    - H/S, T/P/R은 알고리즘이 자동 판단
    )
session_idsenderparttextNz%[Goalskill API] classify-save error:   status_codedetail)
r   r   r   r   r   	Exceptionr   errorr   strr   resultes      $/app/app/routers/goalskill_router.pyapi_classify_and_saver%      s      <()>	
 
 
 
 
 
 
 
 
  < < <@Q@@AAACFF;;;;<s   .3 
A75A22A7z/classify-onlyc                    K   	 t          | j        | j        | j                  }|S # t          $ r:}t          j        d|            t          dt          |                    d}~ww xY w)u   
    분류만 수행 (저장하지 않음). 디버그/테스트용.

    어떤 테이블로 분류되는지 확인할 수 있습니다.
    )r   r   r   z%[Goalskill API] classify-only error: r   r   N)	r	   r   r   r   r   r   r   r   r    r!   s      r$   api_classify_onlyr'   2   s      
<>
 
 

  < < <@Q@@AAACFF;;;;<s   "' 
A+5A&&A+z/queryc           	        K   	 | j         t          vr.t          dd| j          dt          t                               t	          | j         | j                  }| j         | j        t          |          |dS # t          $ r  t          $ r:}t          j	        d|            t          dt          |                    d}~ww xY w)	u<   
    특정 Goalskill_DB 테이블의 데이터 조회.
    i  zInvalid table name: z. Valid tables: r   )
table_namer   countdataz[Goalskill API] query error: r   N)r)   r   r   sortedr
   r   lenr   r   r   r    )r   r+   r#   s      r$   api_query_tabler.   F   s     
<\11?g.@ ? ?(.|(<(<? ?    ((:G<NOO!,!,YY	
 
 	
     < < <8Q88999CFF;;;;<s   A3A8 8C5CCz/all/{session_id}r   c                    K   	 t          |           }| t          |          |dS # t          $ r:}t          j        d|            t          dt          |                    d}~ww xY w)u~   
    유저의 모든 Goalskill_DB 데이터 조회 (48 테이블).
    데이터가 있는 테이블만 반환합니다.
    )r   tables_with_datar+   z[Goalskill API] get-all error: r   r   N)r   r-   r   r   r   r   r    )r   r+   r#   s      r$   api_get_all_datar1   b   s      
<%j11$ #D		
 
 	
  < < <:q::;;;CFF;;;;<s   !& 
A*5A%%A*z/talk-count/{session_id}N
goal_scoper   c                    K   	 t          | ||          }| |pd|pd|dS # t          $ r:}t          j        d|            t	          dt          |                    d}~ww xY w)u   
    유저의 대화 횟수 합계 조회.

    Query params:
    - goal_scope: "H" 또는 "S" (생략 시 모두)
    - part: "A"~"D" (생략 시 모두)
    ALL)r   r2   r   
talk_countz"[Goalskill API] talk-count error: r   r   N)r   r   r   r   r   r    )r   r2   r   r*   r#   s        r$   api_get_talk_countr6   u   s      <z:t<<$$-ME	
 
 	
  < < <=!==>>>CFF;;;;<s     
A$5AA$z/tablesc                     K   i } t          t                    D ]0}|dd         }|| vrg | |<   | |                             |           1t          t                    | dS )uA   
    유효한 48개 테이블 목록 반환 (디버그용).
    N   )total_tablestables)r,   r   appendr-   )tables_by_grouptabler   s      r$   api_list_tablesr>      s      
 O%% . .rr((&(OF#&&u---- L))!      )NN)!__doc__fastapir   r   pydanticr   typingr   r   !app.services.goalskill_classifierr   r	   app.models.goalskill_moduler
   r   r   r   app.core.configr   app.schemas.goalskill_schemar   r   r   routerpostr%   r'   r.   getr    r1   r6   r>    r?   r$   <module>rL      sV    - , , , , , , ,       $ $ $ $ $ $ $ $ N N N N N N N N            # " " " " " g g g g g g g g g g	,.D-E	F	F	F <)? < < < <* <%8 < < < <& X<#4 < < < <6   <s < < < ! <$ &'' !%< <<< 3-< < < ('<4 I    r?   