o
    Ji;#                     @   sz  d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlZd dlmZ e Zejedgddgdgd	 ee
d
ddZdd ZG dd deZG dd deZG dd deZdd ZeddedefddZeddefddZed d!efd"d#Zed$d!efd%d&Zed'd!efd(d)Zed*d!efd+d,Z ed-d!efd.d/Z!dS )0    )CORSMiddleware)FastAPIHTTPException)	BaseModel)JSONResponseN)AsyncOpenAI*T)allow_originsallow_credentialsallow_methodsallow_headersOPENAI_API_KEYzsk-proj-A2OoRlPn5SZTMmEmErYgmIeZkS4C05ZcsAOBSv4tjWKV986Wubbubq264wsnoqttQtJZhSiciPT3BlbkFJn246PFIcpGAJ06ZbNsEnr8ocwpyDjpPSTsnOLQFm0R51CUCKUgZm6G_rUZYhvPOcPfyfMl4r8A)api_keyc                   C   s   t jjdddddS )N	localhost	GOALSkillzGOALSkill_99!@INPUT_DB)hostuserpassworddatabase)mysql	connectorconnect r   r   '/home/air/goalskill_t/back/GOALSkill.pyget_db_connection   s   r   c                   @   s*   e Zd ZU eed< eed< dZeed< dS )ChatRequest
session_idmessageOFFthinking_levelN)__name__
__module____qualname__str__annotations__r    r   r   r   r   r   (   s   
 r   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )
LogRequestr   modesenderr   N)r!   r"   r#   r$   r%   r   r   r   r   r&   .   s
   
 r&   c                   @   s   e Zd ZU ee ed< dS )JournalRequestanswersN)r!   r"   r#   listr$   r%   r   r   r   r   r)   5   s   
 r)   c              
   C   sz   z"t  }| }d}||| |||f |  |  |  W d S  ty< } ztd|  W Y d }~d S d }~ww )NzTINSERT INTO chat_history (session_id, mode, sender, message) VALUES (%s, %s, %s, %s)DB Save Error: )r   cursorexecutecommitclose	Exceptionprint)r   r'   r(   r   connr-   sqler   r   r   save_chat_log:   s   r6   z-/goal-skill-t/api/history/{mode}/{session_id}r'   r   c              
      st   z$t  }|jdd}d}|||| f | }|  |  d|iW S  ty9 } ztdt|dd }~ww )NT)
dictionaryz\SELECT sender, message FROM chat_history WHERE session_id = %s AND mode = %s ORDER BY id ASChistory  status_codedetail)r   r-   r.   fetchallr0   r1   r   r$   )r'   r   r3   r-   r4   rowsr5   r   r   r   get_historyJ   s   
r?   z/goal-skill-t/api/logreqc                    s    t | j| j| j| j ddiS )Nstatusok)r6   r   r'   r(   r   )r@   r   r   r   log_messageY   s   rC   z/goal-skill-t/api/chatrequestc              
         z4t | jdd| j tjjjddddd| jdgddI d H }|jd	 jj}t | jdd
| |d dW S  t	yI } zt
dt|dd }~ww )Nchatr   gpt-4o-minisystemuP   당신은 사용자의 목표 달성과 스킬 성장을 돕는 코치입니다.rolecontentffffff?modelmessagestemperaturer   botanswerthinking_processr9   r:   r6   r   r   clientrF   completionscreatechoicesrK   r1   r   r$   rD   responserS   r5   r   r   r   
chat_basicb   s&   
	r\   z/goal-skill-t/api/MBTIc              
      rE   )NMBTIr   rG   rH   u?   당신은 사용자의 MBTI를 검사하는 선생님입니다.rI   rL   rM   r   rQ   rR   r9   r:   rU   rZ   r   r   r   	chat_mbti   &   
	r^   z/goal-skill-t/api/Pythonc              
      rE   )NPythonr   rG   rH   uj   당신은 사용자의 일본 코딩 사이트 Paiza에 B랭크를 취득하기 위한 선생님입니다.rI   rL   rM   r   rQ   rR   r9   r:   rU   rZ   r   r   r   chat_python   r_   ra   z/goal-skill-t/api/Reportc              
      rE   )NReportr   rG   rH   uk   당신은 사용자의 오늘 하루 어떤 것을 했는지 일지 작성을 도와주는 역할입니다.rI   rL   rM   r   rQ   rR   r9   r:   rU   rZ   r   r   r   chat_report   s&   
	rc   z!/goal-skill-t/api/GenerateJournalc              
      sL  zt | jdk rtddd| jd | jd | jd | jd f\}}}}d	| d
| d| d| d	}tjjjddddd|dgddI d H }|jd jj	}z"t
 }| }	d}
|	|
|||||f |  |	  |  W n ty } ztd|  W Y d }~nd }~ww |ddW S  ty } ztdt|dd }~ww )N   i  u$   답변이 충분하지 않습니다.r:   r            u   
        사용자의 학습 답변을 바탕으로 전문적이고 깔끔한 '오늘의 학습 일지'를 작성해주세요.
        
        [사용자 답변]
        1. 배운 것: u   
        2. 학습 방법: u   
        3. 어려웠던 점: u   
        4. 해결 방법: u/  
        
        [출력 형식]
        # 📅 오늘의 학습 일지
        
        ## 💡 핵심 배움
        (내용 요약)
        
        ## 🛠️ 학습 과정 및 트러블 슈팅
        (내용 요약)
        
        ## 🚀 내일의 다짐
        (격려의 한마디)
        rG   rH   u*   당신은 전문적인 에디터입니다.rI   r   rL   rM   zINSERT INTO learning_logs (what_learned, how_learned, difficulty, solution, final_report) 
                     VALUES (%s, %s, %s, %s, %s)r,   zDB Saved & GeneratedrR   r9   )lenr*   r   rV   rF   rW   rX   rY   r   rK   r   r-   r.   r/   r0   r1   r2   r$   )rD   q1q2q3q4promptr[   final_reportr3   r-   r4   db_errr5   r   r   r   generate_journal   sR   ,rp   )"fastapi.middleware.corsr   fastapir   r   pydanticr   fastapi.responsesr   	tracebackosmysql.connectorr   openair   appadd_middlewaregetenvrV   r   r   r&   r)   r6   getr$   r?   postrC   r\   r^   ra   rc   rp   r   r   r   r   <module>   sL    

