o
    |i                     @   s   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 d dlmZ d dlmZmZ edd	gd
ZeddefddZeddefddZdS )    )	APIRouterHTTPException)	it_module)StartITRequestAnswerITRequest)get_it_questionsget_question_by_id)calculate_final_result)classify_and_save)ListDictz/goal-skill-t/api/itIT)prefixtagsz/startrequestc              
      s   z?t | j t }|d }g }g d}t|d D ]\}}|t|k r1|||  d|  q|d |d |dt|dW S  tyT } ztd	t	|d
d}~ww )u?   
    IT 기초 테스트 시작 - 첫 번째 문제 반환
    r   ABCDEoptions idquestion   question_idquestion_textr   currenttotal  status_codedetailN)
r   clear_session_logs
session_idr   	enumeratelenappend	Exceptionr   str)r   	questionsfirst_questionoptions_with_letterslettersiopte r3   3/home/air/goalskill_t/back/app/routers/it_router.pystart_it_test   s*   r5   z/answerc              
      s  zt  }t|}t| j}|stdd| j dd| j}d|v r2|dd}t|dkr2|d }|d }| | k}tj	| j
| j||d t| j
}||krt| j
}	d	d
 |	D }
t| j
|
}tj| j
|d |d |d d d|d  d|d  d|d  }t| j
dd|dI dH  d|dW S | jd }t|}|stdd| ddg }g d}t|d D ]\}}|t|k r|||  d|  qd|d |d ||d |ddW S  ty     ty } ztd t|dd}~ww )!u   
    IT 기초 테스트 답변 처리
    
    1. 답변 저장 (it_log)
    2. 정답 여부 확인
    3. 마지막 문제면 결과 계산 & 저장
    4. 다음 문제 반환 or 완료 응답
    i  z	Question z
 not foundr"   r   r   answer)r&   r   selected_answer
is_correctc                 S   s$   g | ]}|d  |d |d dqS )r   r7   r8   )r   r7   r8   r3   ).0ansr3   r3   r4   
<listcomp>a   s    z"answer_it_test.<locals>.<listcomp>total_scorelevelmessage)r&   r<   r=   descriptionu   IT基礎テスト: u   問正解, レベル: z - Ir   )r&   senderparttextN	completed)statusresultzNext question r   r   continuer   r   r   )rE   next_questionr!   )r   r(   r   r   r   r7   splitstripr   save_answerr&   get_answer_countget_all_answersr	   save_or_update_outputr
   r'   r)   r*   r+   )r   r,   total_questionscurrent_questionselected_answer_cleanpartscorrect_answerr8   answer_countall_answersanswers_for_scoringrF   result_textnext_question_idrH   r.   r/   r0   r1   r2   r3   r3   r4   answer_it_test0   s   

	"
	rY   N)fastapir   r   
app.modelsr   app.schemas.it_schemar   r   app.services.it_questionsr   r   app.services.it_scoringr	   !app.services.goalskill_classifierr
   typingr   r   routerpostr5   rY   r3   r3   r3   r4   <module>   s   