
    Ui"                        d dl Zd dlmZmZ d dlmZmZmZ dde	de
de	dee         fdZde	d	e
d
e	de
de	de	de	fdZde	d
e	de	de	fdZde	de
fdZde	de	dee         fdZde	dee         fdZde	dee         fdZde	fdZdS )    N)A_DB_CONFIGlogger)ListDictOptional
session_idquestion_idselected_option
is_correctc                    d}	 t          j        j        di t          }|                                }d}|                    || |||f           |                                 |j        |r)|                                 |                                 S S # t          $ r}t          j        d|            |d}~ww xY w# |r)|                                 |                                 w w xY w)u   
    SPI 답변 저장 (spi_log 테이블)
    
    Args:
        session_id: 세션 ID
        question_id: 문제 ID
        selected_option: 선택한 답변
        is_correct: 정답 여부 (능력검사만, 성격검사는 None)
    Nz
            INSERT INTO spi_log 
            (session_id, question_id, selected_option, is_correct)
            VALUES (%s, %s, %s, %s)
        zSPI Answer Save Error:  )mysql	connectorconnectr   cursorexecutecommit	lastrowidclose	Exceptionr   error)r   r	   r
   r   connr   sqles           /app/app/models/spi_module.pysave_answerr      s    D&5555 	sZozRSSS  	LLNNNJJLLLL		    2q22333  	LLNNNJJLLLL	s$   A%B 
B=B88B==C   -C-language_scorelanguage_gradenonverbal_scorenonverbal_gradepersonality_scorepersonality_typec           
      4   d}	 t          j        j        di t          }|                                }d}	|                    |	| ||||||f           |                                 t          j        d|             t          | |||           n+# t          $ r}
t          j        d|
            |
d}
~
ww xY w	 |r*|                                 |                                 dS dS # |r)|                                 |                                 w w xY w)u   
    personality_score: 性格特性の個別スコアJSON文字列
    personality_type: AI コメント（日本語テキスト）
    Nar  
            INSERT INTO spi_Output 
            (session_id, language_score, language_grade, nonverbal_score, nonverbal_grade, 
             personality_score, personality_type)
            VALUES (%s, %s, %s, %s, %s, %s, %s)
            ON DUPLICATE KEY UPDATE
                language_score = VALUES(language_score),
                language_grade = VALUES(language_grade),
                nonverbal_score = VALUES(nonverbal_score),
                nonverbal_grade = VALUES(nonverbal_grade),
                personality_score = VALUES(personality_score),
                personality_type = VALUES(personality_type)
        zSPI Output saved for session: zSPI Output Save Error: r   )r   r   r   r   r   r   r   r   infosync_to_user_profile_summaryr   r   r   )r   r   r   r   r    r!   r"   r   r   r   r   s              r   save_or_update_outputr&   1   s]    D'&5555 	sZ+_-/?A 	B 	B 	B 	AZAABBB 	%		
 	
 	
 	
    2q22333	
  	LLNNNJJLLLLL	 	4 	LLNNNJJLLLL	s*   BB C* 
B8B33B88C* *-Dc                    d}	 t          j        j        di t          }|                                }d}|                    || |||f           |                                 t          j        d|             n.# t          $ r!}t          j
        d|            Y d}~nd}~ww xY w|r*|                                 |                                 dS dS # |r)|                                 |                                 w w xY w)u=   SPI 완료 시 user_profile_summary 테이블에도 동기화Na  
            INSERT INTO user_profile_summary
            (session_id, spi_language, spi_nonverbal, spi_personality)
            VALUES (%s, %s, %s, %s)
            ON DUPLICATE KEY UPDATE
                spi_language = VALUES(spi_language),
                spi_nonverbal = VALUES(spi_nonverbal),
                spi_personality = VALUES(spi_personality),
                updated_at = NOW()
        z0SPI synced to user_profile_summary for session: zSPI Summary Sync Error: r   r   r   r   r   r   r   r   r   r$   r   r   r   )r   r   r    r"   r   r   r   r   s           r   r%   r%   e   s$    D&5555	 	sZJZ[\\\SzSSTTTT   333444
  	LLNNNJJLLLLL	 	4 	LLNNNJJLLLL	s0   A6A; :C ;
B&B!C !B&&C -Dreturnc                 F   d}	 t          j        j        di t          }|                                }d}|                    || f           |                                }|r|d         nd	 |r)|                                 |                                 S S # t          $ rN}t          j
        d|            Y d}~|r*|                                 |                                 dS dS d}~ww xY w# |r)|                                 |                                 w w xY w)u"   현재 답변한 문제 수 조회Nz2SELECT COUNT(*) FROM spi_log WHERE session_id = %sr   zSPI Answer Count Error: r   r   r   r   r   r   r   fetchoner   r   r   r   r   r   r   r   resultr   s         r   get_answer_countr/      s;   D&5555BsZM***""")vayy)  	LLNNNJJLLLL		    333444qqq 	LLNNNJJLLLLL	 		  	LLNNNJJLLLL	s*   A'B 
C0"C+9C3 +C00C3 3-D question_typec                    d}	 t          j        j        di t          }|                    d          }|dk    rd\  }}nE|dk    rd\  }}n9|dk    rd	\  }}n-g |r)|                                 |                                 S S d
}|                    || ||f           |                                }||r)|                                 |                                 S S # t          $ rN}t          j
        d|            g cY d}~|r)|                                 |                                 S S d}~ww xY w# |r)|                                 |                                 w w xY w)u   
    타입별 답변 조회
    
    Args:
        session_id: 세션 ID
        question_type: 'language' (1-5), 'nonverbal' (6-10), 'personality' (11-20)
    
    Returns:
        답변 리스트
    NT
dictionarylanguage)      	nonverbal)   
   personality)      z
            SELECT question_id, selected_option, is_correct
            FROM spi_log
            WHERE session_id = %s AND question_id BETWEEN %s AND %s
            ORDER BY question_id
        zSPI Answers by Type Error: r   )r   r   r   r   r   r   r   fetchallr   r   r   )	r   r0   r   r   min_idmax_idr   resultsr   s	            r   get_answers_by_typerA      s    D &5555-- J&&!NFFFk))"NFFFm++#NFFF$  	LLNNNJJLLLL	! 	sZ8999//##  	LLNNNJJLLLL		    6166777					 	LLNNNJJLLLL		  	LLNNNJJLLLL	s6   AC" 0C" "
D:,D5D:D= 5D::D= =-E*c                 4   d}	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }||r)|                                 |                                 S S # t          $ rN}t          j
        d|            g cY d}~|r)|                                 |                                 S S d}~ww xY w# |r)|                                 |                                 w w xY w)u   전체 답변 조회NTr2   z
            SELECT question_id, selected_option, is_correct
            FROM spi_log
            WHERE session_id = %s
            ORDER BY question_id
        zSPI All Answers Error: r   )r   r   r   r   r   r   r=   r   r   r   r   )r   r   r   r   r@   r   s         r   get_all_answersrC      s2   D&5555-- 	sZM***//##  	LLNNNJJLLLL		    2q22333					 	LLNNNJJLLLL		  	LLNNNJJLLLL	s0   AB 
C'C"1C'2C* "C''C* *-Dc                 4   d}	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }||r)|                                 |                                 S S # t          $ rN}t          j
        d|            Y d}~|r*|                                 |                                 dS dS d}~ww xY w# |r)|                                 |                                 w w xY w)u   SPI 최종 결과 조회NTr2   z.SELECT * FROM spi_Output WHERE session_id = %szSPI Output Get Error: r   r+   r-   s         r   
get_outputrE      s1   D&5555-->sZM***""  	LLNNNJJLLLL		    1a11222ttt 	LLNNNJJLLLLL	 		  	LLNNNJJLLLL	s*   AB 
C'C"0C* "C''C* *-Dc                    d}	 t          j        j        di t          }|                                }d}|                    || f           |                                 t          j        d|             n.# t          $ r!}t          j
        d|            Y d}~nd}~ww xY w|r*|                                 |                                 dS dS # |r)|                                 |                                 w w xY w)uE   
    테스트 시작 시 이전 기록 초기화 (재시작용)
    Nz)DELETE FROM spi_log WHERE session_id = %szSPI Session Cleared: zSPI Session Clear Error: r   r(   )r   r   r   r   r   s        r   clear_session_logsrG     s    D&5555 :sZM***8J889999 6 6 6444555555556  	LLNNNJJLLLLL	 	4 	LLNNNJJLLLL	s0   A3A8 7C 8
B#BC B##C -D)N)mysql.connectorr   app.core.configr   r   typingr   r   r   strintboolr   r&   r%   r/   rA   rC   rE   rG   r       r   <module>rO      s       / / / / / / / / ' ' ' ' ' ' ' ' ' '   C  c  C  U]^bUc        L/c /3 /PS /+./AD/-0/DG/ / / /hS # 36JM   H     ,,C , ,T
 , , , ,^ T
    83 8D>    03      rN   