
    Iji),                         d dl mZmZ d dlZd dlmZ d dlmZ d dl	m	Z	m
Z
mZ d ZddZd Zd	 Zd
 Zd Zd Zd Zd ZdedefdZdededefdZdedefdZdedefdZdS )    )ListDictN)B_DB_CONFIG)logger)datetimetimezone	timedeltac                 r   	 t          j        j        di t          }|                                }d}|                    || ||f           |                                 |                                 |                                 d S # t          $ r"}t          j
        d|            Y d }~d S d }~ww xY w)NzGINSERT INTO daily_log (session_id, sender, message) VALUES (%s, %s, %s)zDaily Log Save Error:  )mysql	connectorconnectr   cursorexecutecommitclose	Exceptionr   error)
session_idsendermessageconnr   sqles          #/app/app/models/report_db_module.pysave_daily_logr      s    	3&5555WsZ9:::

 3 3 31a112222222223s   BB
 

B6B11B6c           	         	 t          j        j        di t          }|                                }d}|                    || |||||f           |                                 |                                 |                                 t          j	        d| d|  d| d           d S # t          $ r"}	t          j        d|	            Y d }	~	d S d }	~	ww xY w)Nz
            INSERT INTO daily_note 
            (session_id, daily, date, learning, today_mindset, ai_comment) 
            VALUES (%s, %s, %s, %s, %s, %s)
        zDaily Note Saved: z - z (day=)zDaily Note Save Error: r   r   r   r   r   r   r   r   r   r   infor   r   )
r   datelearningmindset
ai_commentdailyr   r   r   r   s
             r   save_structured_diaryr&      s    4&5555 	sZhTUUU

LLL*LLELLLMMMMM 4 4 42q223333333334s   B'B+ +
C5CCc                 t   	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }|                                 |                                 |S # t          $ r#}t          j
        d|            g cY d }~S d }~ww xY w)NT
dictionaryzWSELECT sender, message, created_at FROM daily_log WHERE session_id = %s ORDER BY id ASCzDaily Log Load Error: r   r   r   r   r   r   r   fetchallr   r   r   r   )r   r   r   r   rowsr   s         r   get_daily_log_from_dbr-   0   s    &5555--gsZM***  

   1a11222						   BB
 

B7B2,B72B7c                    	 t          t          d                    }t          j        |                              d          }t          j        j        d	i t          }|	                    d          }d}|
                    || |f           |                                }|                                 |                                 |S # t          $ r#}t          j        d|            g cY d}~S d}~ww xY w)
uX   오늘의 daily_log만 가져오기 (A' 파트용: 과거 대화를 참조하지 않음)	   hours%Y-%m-%dTr(   zqSELECT sender, message, created_at FROM daily_log WHERE session_id = %s AND DATE(created_at) = %s ORDER BY id ASCzToday Daily Log Load Error: Nr   )r   r	   r   nowstrftimer   r   r   r   r   r   r+   r   r   r   r   )r   JST	today_strr   r   r   r,   r   s           r   get_today_daily_logr8   >   s    yq)))**L%%..z::	&5555-- BsZ3444  

   7A77888						s   CC 
C<C71C<7C<c                 t   	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }|                                 |                                 |S # t          $ r#}t          j
        d|            g cY d }~S d }~ww xY w)NTr(   zz
            SELECT * FROM daily_note 
            WHERE session_id = %s 
            ORDER BY date DESC, id DESC
        zAll Daily Notes Load Error: r   r*   )r   r   r   r   resultsr   s         r   get_all_daily_notesr;   R   s    &5555--
 	sZM***//##

   7A77888						r.   c                 r   	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }|                                 |                                 |S # t          $ r"}t          j
        d|            Y d }~d S d }~ww xY w)NTr(   z
            SELECT * FROM daily_note 
            WHERE session_id = %s 
            ORDER BY date DESC, id DESC 
            LIMIT 1
        zLatest Data Load Error: r   )r   r   r   r   r   r   fetchoner   r   r   r   )r   r   r   r   resultr   s         r   get_yesterday_datar?   h   s    &5555-- 	sZM***""

   333444ttttts   BB
 

B6B11B6c                    	 t          t          d                    }t          j        |                              d          }t          j        j        di t          }|	                    d          }d}|
                    || |f           |                                }|                                 |                                 |S # t          $ r"}t          j        d|            Y d }~d S d }~ww xY w)	Nr0   r1   r3   Tr(   zUSELECT * FROM daily_note WHERE session_id = %s AND date = %s ORDER BY id DESC LIMIT 1zToday Data Load Error: r   )r   r	   r   r4   r5   r   r   r   r   r   r   r=   r   r   r   r   )r   r6   r7   r   r   r   r>   r   s           r   get_today_datarA      s    yq)))**L%%..z::	&5555--esZ3444""

   2q22333ttttts   CC 
C;C66C;c                    	 t          j        j        di t          }|                                }d}|                    |||| f           |                                 |                                 |                                 t          j	        d|             d S # t          $ r"}t          j        d|            Y d }~d S d }~ww xY w)Nz@UPDATE daily_note SET ai_comment = %s, advice = %s WHERE id = %szUpdated AI Feedback for ID: zAI Feedback Update Error: r   r   )r   r$   advicer   r   r   r   s          r   update_yesterday_ai_feedbackrD      s    7&5555 QsZ<===

?:??@@@@@ 7 7 75!556666666667s   BB! !
C+CCc                    	 t          j        j        di t          }|                                }d}|                    ||| |f           |                                 |j        }|                                 |                                 t          j
        d|  d| d|            |dk    S # t          $ r"}t          j        d|            Y d }~dS d }~ww xY w)	NzKUPDATE daily_note SET boss_comment = %s WHERE session_id = %s AND date = %szUpdated Boss Comment for z on z. Affected: r   zBoss Comment Update Error: Fr   )r   r   r   r   r   r   r   rowcountr   r   r    r   r   )r   r!   boss_commentr   r   r   	row_countr   s           r   update_boss_commentrI      s    &5555 \s\:t<===O	

]
]]]]R[]]^^^1}   6166777uuuuus   B/B2 2
C<CCr   returnc                 X   d }	 t          t          d                    }t          j        |          }|                    d          }t          j        j        di t          }|	                                }d}|
                    || |f           |                                }|                                 |                                 |d uS # t          $ rL}t          j        d|            |r(|                                r|                                 Y d }~dS d }~ww xY w)Nr0   r1   r3   zESELECT id FROM daily_note WHERE session_id = %s AND date = %s LIMIT 1zCheck Today Log Error: Fr   )r   r	   r   r4   r5   r   r   r   r   r   r   r=   r   r   r   r   is_connected)	r   r   r6   r4   r7   r   r   rowr   s	            r   check_today_daily_log_existsrN      s'   Dyq)))**l3LL,,	&5555UsZ3444oo

$   2q22333 	D%%'' 	JJLLLuuuuu	s   CC 
D)AD$$D)r%   c                    d}	 t          j        j        di t          }|                                }d}|                    || |f           |                                }|                                 |                                 |duS # t          $ rL}t          j
        d|            |r(|                                r|                                 Y d}~dS d}~ww xY w)u@   daily_note에 해당 day 번호의 레코드가 있는지 확인NzFSELECT id FROM daily_note WHERE session_id = %s AND daily = %s LIMIT 1z Check Daily Note For Day Error: Fr   r   r   r   r   r   r   r=   r   r   r   r   rL   r   r%   r   r   r   rM   r   s          r   check_daily_note_for_dayrR      s    D&5555VsZ/000oo

$   ;;;<<< 	D%%'' 	JJLLLuuuuu	s   BB 
C#ACC#c                    d}	 t          j        j        di t          }|                                }d}|                    || |f           |                                }|                                 |                                 |r|d         ndS # t          $ rL}t          j
        d|            |r(|                                r|                                 Y d}~dS d}~ww xY w)uC   daily_note에서 해당 day의 작성 날짜(date 컨럼)를 반환NzYSELECT date FROM daily_note WHERE session_id = %s AND daily = %s ORDER BY id DESC LIMIT 1r   z#Get Daily Note Date For Day Error: r   rP   rQ   s          r   get_daily_note_date_for_dayrT      s    D&5555isZ/000oo

&s1vv$&   >1>>??? 	D%%'' 	JJLLLttttt	s   BB 
C+AC&&C+c           	         ddl m} ddl}d}g }	  |j        j        di |}|                    d          }d}|                    || f           |                                }|D ]c}t          |d                   	                    dd	          dd
         }	|d         rdnd}
|
                    d|	 d|d          d|
            dd}|                    || f           |                                }|D ]c}t          |d                   	                    dd	          dd
         }	|d         rdnd}
|
                    d|	 d|d          d|
            d|                                 |                                 |sdS d                    |          S # t          $ rL}t          j        d|            |r(|                                r|                                 Y d}~dS d}~ww xY w)zYFetches quiz and cert results for the session solved today to understand user's struggle.r   )A_DB_CONFIGNTr(   a-  
            SELECT q.question_text, r.user_answer, r.is_correct 
            FROM quiz_results r 
            JOIN quiz_problems q ON r.problem_id = q.problem_id 
            WHERE r.session_id = %s AND DATE(r.solved_at) = CURDATE()
            ORDER BY r.solved_at DESC
            LIMIT 10
        question_text
 d   
is_correctOXz[Python Quiz] Q: z... | Ans: user_answerz | Result: a'  
            SELECT q.question_text, r.user_answer, r.is_correct 
            FROM cert_results r 
            JOIN cert_questions q ON r.question_id = q.id 
            WHERE r.session_id = %s AND DATE(r.solved_at) = CURDATE()
            ORDER BY r.solved_at DESC
            LIMIT 10
        z[Cert Quiz] Q: u   クイズ履歴なしzGet Quiz Logs Error: u   クイズ履歴取得失敗r   )app.core.configrV   mysql.connectorr   r   r   r   r+   strreplaceappendr   joinr   r   r   rL   )r   rV   r   r   quiz_strr   sql_quiz	rows_quizrq_textcorrsql_cert	rows_certr   s                 r   get_daily_quiz_logsrm      sh   ++++++DH.-&u&5555-- 	x*///OO%%	 	h 	hA?+,,44T3??EFL/233sDOOfff1]CSff`dffgggg 	x*///OO%%	 	f 	fA?+,,44T3??EFL/233sDOOdfdd=AQdd^bddeeee

 	+**yy""" - - -0Q00111 	D%%'' 	JJLLL,,,,,,	-s   E8F 
F 
G5)AG00G5)N)typingr   r   r`   r   r_   r   app.corer   r   r   r	   r   r&   r-   r8   r;   r?   rA   rD   rI   ra   boolrN   intrR   rT   rm   r       r   <module>rs      s               ' ' ' ' ' '       2 2 2 2 2 2 2 2 2 2
3 
3 
34 4 4 4,    (  ,  .  (7 7 7&  .S T    6 S T    &C     &4-C 4-C 4- 4- 4- 4- 4- 4-rr   