o
    լi                     @   s   d dl Zd dlZd dlZd dlZd dlmZ d dlmZ ee	Z
dZdd Zdeded	efd
dZdeded	efddZded	edB fddZded	efddZddedededed	ef
ddZdS )    N)datetime)get_db_configGoalskill_loginc                  C   s   t t} tjjdi | S )u   Goalskill_login DB 연결N )r   LOGIN_DBmysql	connectorconnect)configr   r   4/home/air/goalskill_t/back/app/models/auth_module.py_get_login_db   s   r   user_idpasswordreturnc              
   C   sV  t  }|jdd}zze|d| f | r&ddddW W |  |  S t|dt 	d}d	t
 jdd
  tt   }|d| ||f |  td|  d|  d|ddW W |  |  S  ty } z&|  td|  dddt| dW  Y d}~W |  |  S d}~ww |  |  w )uo   
    새 유저를 등록합니다.
    Returns: {"success": bool, "session_id": str|None, "message": str}
    T
dictionaryz'SELECT id FROM login WHERE user_id = %sFNu    すでに存在するIDです。success
session_idmessageutf-8sess_   z
            INSERT INTO login (user_id, password_hash, session_id, created_at)
            VALUES (%s, %s, %s, NOW())
            z[Auth] User registered: z, session: u   会員登録成功！z[Auth] Registration error: u   会員登録失敗: )r   cursorexecutefetchoneclosebcrypthashpwencodegensaltdecodeuuiduuid4hexintr   now	timestampcommitloggerinfo	Exceptionrollbackerrorstr)r   r   connr   password_hashr   er   r   r   create_user   s:   
(
"

r2   c              
   C   sH  t  }|jdd}zzb|d| f | }|s(ddddW W |  |  S t|d|d	 dsFddd
dW W |  |  S |d|d f |  t	
d|   d|d ddW W |  |  S  ty } z"t	d|  dddt| dW  Y d}~W |  |  S d}~ww |  |  w )ur   
    유저 인증을 수행합니다.
    Returns: {"success": bool, "session_id": str|None, "message": str}
    Tr   zBSELECT id, password_hash, session_id FROM login WHERE user_id = %sFNu   存在しないIDです。r   r   r0   u'   パスワードが一致しません。z1UPDATE login SET last_login = NOW() WHERE id = %sidz[Auth] User logged in: r   u   ログイン成功！z[Auth] Login error: u   ログイン失敗: )r   r   r   r   r   r   checkpwr   r(   r)   r*   r+   r-   r.   )r   r   r/   r   userr1   r   r   r   authenticate_userF   sD   


"

r6   r   c              
   C   s   t  }|jdd}z:z|d| f | W W |  |  S  tyC } ztd|  W Y d}~W |  |  dS d}~ww |  |  w )u.   세션 ID로 유저 정보를 조회합니다.Tr   zWSELECT id, user_id, session_id, created_at, last_login FROM login WHERE session_id = %sz[Auth] Session lookup error: N)r   r   r   r   r   r+   r)   r-   r   r/   r   r1   r   r   r   get_user_by_sessionp   s&   


r8   c              
   C   s   t  }|jdd}z;z|d| f | W W |  |  S  tyD } ztd|  g W  Y d}~W |  |  S d}~ww |  |  w )u5   유저의 학습 진행도 목록을 조회합니다.Tr   z
            SELECT id, session_id, item_id, status, score, updated_at
            FROM user_study_progress
            WHERE session_id = %s
            ORDER BY item_id
            z[Auth] Progress fetch error: N)r   r   r   fetchallr   r+   r)   r-   r7   r   r   r   get_study_progress   s&   
	


r:   item_idstatusscorec              
   C   s   t  }|jdd}z]z+|d| |||f |  td|  d| d|  dddW W |  |  S  tyf } z%|  t	d	|  d
dt
| dW  Y d}~W |  |  S d}~ww |  |  w )u3   학습 진행도를 업데이트합니다 (UPSERT).Tr   a  
            INSERT INTO user_study_progress (session_id, item_id, status, score)
            VALUES (%s, %s, %s, %s)
            ON DUPLICATE KEY UPDATE
                status = VALUES(status),
                score = VALUES(score),
                updated_at = NOW()
            z![Auth] Progress updated: session=z, item=z	, status=u   進捗更新完了)r   r   z[Auth] Progress update error: Fu   更新失敗: N)r   r   r   r(   r)   r*   r   r+   r,   r-   r.   )r   r;   r<   r=   r/   r   r1   r   r   r   update_study_progress   s,   

 

r>   )r   )mysql.connectorr   r   r"   loggingr   app.core.configr   	getLogger__name__r)   r   r   r.   dictr2   r6   r8   listr:   r%   r>   r   r   r   r   <module>   s   
	,*$