o
    "i8                     @   s>   d dl mZ d dlmZ d dlZd dlmZ G dd dZdS )    )contextmanager)AnyN)
DictCursorc                   @   s   e Zd Zdededededef
ddZedd	 Zd
ededededee ddfddZ	d
ededee
eef  fddZd
ededededededefddZd
ededede
fddZd"d
ededefd d!ZdS )#MySQLRepositoryhostportuserpassworddbc              	   C   s   |||||t ddd| _d S )NTutf8mb4)r   r   r   r	   databasecursorclass
autocommitcharset)r   cfg)selfr   r   r   r	   r
    r   N/home/aiteam/pcaa-dev/ai-call-quality-rag/app/repositories/mysql_repository.py__init__	   s   zMySQLRepository.__init__c                 c   s4    t jdi | j}z
|V  W |  d S |  w )Nr   )pymysqlconnectr   close)r   cr   r   r   conn   s
   zMySQLRepository.conn	tenant_idcall_idagent_idchunk_counttagsreturnNc                 C   sR   |   }| }|d||||d|f W d    d S 1 s"w   Y  d S )Na}  
                INSERT INTO calls (tenant_id, call_id, agent_id, chunk_count, tags)
                VALUES (%s, %s, %s, %s, %s)
                ON DUPLICATE KEY UPDATE
                    agent_id = VALUES(agent_id),
                    chunk_count = VALUES(chunk_count),
                    tags = VALUES(tags),
                    updated_at = CURRENT_TIMESTAMP
                ,)r   cursorexecutejoin)r   r   r   r   r   r   r   curr   r   r   save_call_ingestion   s   
	"z#MySQLRepository.save_call_ingestionc                 C   sL   |   }| }|d||f | W  d    S 1 sw   Y  d S )Nz
                SELECT chunk_id, speaker, text, timestamp
                FROM call_chunks
                WHERE tenant_id = %s AND call_id = %s
                ORDER BY chunk_index
                r   r!   r"   fetchall)r   r   r   r   r$   r   r   r   get_call_chunks_text-   s   
	$z$MySQLRepository.get_call_chunks_textchunk_indexchunk_idspeakertextc	                 C   sR   |   }	|	 }
|
d||||||||f W d    d S 1 s"w   Y  d S )Nas  
                INSERT INTO call_chunks (tenant_id, call_id, agent_id, chunk_index, chunk_id, speaker, text, timestamp)
                VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
                ON DUPLICATE KEY UPDATE
                    speaker = VALUES(speaker),
                    text = VALUES(text),
                    timestamp = VALUES(timestamp)
                )r   r!   r"   )r   r   r   r   r)   r*   r+   r,   	timestampr   r$   r   r   r   save_chunk_metadata;   s   
"z#MySQLRepository.save_chunk_metadata
score_jsonc              	   C   sN   |   }| }|d|||t|f W d    d S 1 s w   Y  d S )Na  
                INSERT INTO call_scores (tenant_id, call_id, agent_id, score_json)
                VALUES (%s, %s, %s, %s)
                ON DUPLICATE KEY UPDATE
                    score_json = VALUES(score_json),
                    updated_at = CURRENT_TIMESTAMP
                )r   r!   r"   str)r   r   r   r   r/   r   r$   r   r   r   
save_scoreJ   s   
"zMySQLRepository.save_score2   limitc                 C   sN   |   }| }|d|||f | W  d    S 1 s w   Y  d S )Nz
                SELECT score_json
                FROM call_scores
                WHERE tenant_id = %s AND agent_id = %s
                ORDER BY updated_at DESC
                LIMIT %s
                r&   )r   r   r   r3   r   r$   r   r   r   get_agent_latest_scoresX   s   

$z'MySQLRepository.get_agent_latest_scores)r2   )__name__
__module____qualname__r0   intr   r   r   listr%   dictr   r(   r.   r1   r4   r   r   r   r   r      s    
&"&r   )
contextlibr   typingr   r   pymysql.cursorsr   r   r   r   r   r   <module>   s
    