
    plj                     H   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ  e       Z e j,                  e      Z G d
 de      Z G d de      Zej7                  ddgee   dd       edd       ed d       fde	dededee   fd       Zej7                  ddgee   dd      dedee   fd        Z ejC                  d!dgeedz     d"d      d#ede	fd$       Z"ejC                  d%dged   d&d      d#eded   fd'       Z#y)(    N)text)OptionalLiteral)	APIRouterQueryRequest)	BaseModel)HTTPException)ResponseWrapper)save_conversationsave_conversation_feedback)get_async_dbc                   ^    e Zd ZU dZee   ed<   dZee   ed<   dZee   ed<   dZ	ee   ed<   y)SaveConversationRequestNconversation_idquestionanswercustomer_id)
__name__
__module____qualname__r   r   str__annotations__r   r   r        E/var/www/html/ls-ibe-bot-apis-staging/app/controllers/conversation.pyr   r      s:    %)OXc])"Hhsm" FHSM !%K#%r   r   c                   (    e Zd ZU eed<   ed   ed<   y)RateConversationRequestr   )updownfeedbackN)r   r   r   r   r   r   r   r   r   r   r      s    l##r   r   z/conversationsConversationszGet all conversations   )tagsresponse_modelsummarystatus_code
      )le)gerequestlimitoffsetreturnc           	        K   | j                   j                  }| j                   j                  }|||d}|r||d<   t               4 d {   }|j	                  t        d|rdndz   dz         |       d {   }|j                         }|s!t        ddd	g i
      cd d d       d {    S d d d       d {    D 	cg c]t  }	|	j                  |	j                  |	j                  |	j                  r|	j                  j                         nd |	j                  r|	j                  j                         nd dv }
}	t        ddd	|
i
      S 7 7 7 7 # 1 d {  7  sw Y   xY wc c}	w w)N)hotel_idr-   r.   sub_hotel_ida  
                SELECT 
                    id AS conversation_id,
                    first_message,
                    metadata,
                    created_at,
                    updated_at
                FROM conversations
                WHERE hotel_id = :hotel_idz! AND sub_hotel_id = :sub_hotel_id zs
                ORDER BY updated_at DESC
                LIMIT :limit
                OFFSET :offset;
            TzNo conversations foundconversationsstatusmessagedata)r   first_messagemetadata
created_at
updated_atOK)stateHOTEL_IDSUB_HOTEL_IDr   executer   fetchallr   r   r9   r:   r;   	isoformatr<   )r,   r-   r.   r1   r2   search_paramsdbresultrowsrowr4   s              r   get_all_conversationsrI      sw     }}%%H==--L M (4n%~~zz . \h0Wmoqt  
 
"  "0%r*+ ~~~~F 	 C  #22 ..8;#..224D8;#..224D	
   	 }- M 
 ~~~~6	sy   AE1
EE1)E7E8%EE1)E*E1:E;E1A9E,<E1EE1E1E)E E)%E1z /conversations/{conversation_id}ConversationzGet conversationr   c           	      *  K   t               4 d {   }|j                  t        d      d| i       d {   }|j                         }|st	        dd      d d d       d {    d   j
                  }t        d |D        d       }|D cg c]H  }|j                  :|j                  |j                  |j                  |j                  |j                  dJ }}|||d	}t        d
d|      S 7 7 7 # 1 d {  7  sw Y   xY wc c}w w)Na  
                SELECT 
                    c.id AS conversation_id,
                    m.customer_id,
                    m.message,
                    m.role,
                    m.feedback,
                    m.created_at,
                    m.updated_at
                FROM conversations c
                LEFT JOIN messages m 
                    ON m.conversation_id = c.id
                WHERE c.id = :id
                ORDER BY m.created_at ASC;
            idi  zConversation not foundr'   detailr   c              3   N   K   | ]  }|j                   s|j                     y w)N)r   ).0rs     r   	<genexpr>z#get_conversation.<locals>.<genexpr>   s     Et!q}}ts   %%)roler   r!   r;   r<   )r   r   messagesTr=   r5   )r   rA   r   rB   r
   r   nextr7   rS   r!   r;   r<   r   )	r   rE   rF   rG   conv_idr   rH   rT   response_datas	            r   get_conversationrX   ^   s     ~~zz   ?#!
 
&  C8PQQ/ ~4 1g%%GEtEtLK 	 C3;;2 HHKK....	
   	 #"M $=II_ 
 ~~~<	sa   DC3D!C9C5#C9D%C7&*DADD5C97D9D?D DDz/save/conversationzSave conversationargsc                   K   t        | j                  |j                  j                  |j                  j                  | j
                  | j                  | j                         d {   | _        t        dd| j                        S 7 !w)NTr=   r5   )	r   r   r>   r?   r@   r   r   r   r   )rY   r,   s     r   save_conversationsr[      s      "343G3GI_I_ahanana{a{  ~B  ~K  ~K  MQ  MX  MX  Z^  Zj  Zj  "k  kD$4;O;OPP ks   A$B
&B'"B
z/rate/conversationz3Save thumbs up/down feedback for latest AI responsec                    K   t        | j                  | j                         d {   }|st        dd      t	        ddd       S 7 !w)N)r   r!   i  zFailed to save feedbackrM   Tr=   r5   )r   r   r!   r
   r   )rY   saveds     r   rate_conversationr^      sN      -,, E 4MNN$4@@s   %AA	"A)$logging
sqlalchemyr   typingr   r   fastapir   r   r   pydanticr	   app.exceptions.httpr
   app.schemasr   app.utils.store_conversationr   r   app.models.connectionr   router	getLoggerr   loggerr   r   getdictintrI   r   rX   postr[   r^   r   r   r   <module>ro      s     $ - -  - ' V .				8	$&i &$i $ 
	"4(#   @ERB?O_defkl_m 8 8 8Y\ 8  sB  CG  sH 88v &
	"4(  0JC 0JOD4I 0J0Jd 
	"3:.  Q#: QW QQ 
	"4(A  	A"9 	Aod>S 	A	Ar   