
    h#                        d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZmZ ddlmZ ddlZddlmZ ddlmZmZmZ  ee          j        j        Zd	e d
Z eed          Z edde          Z e            Z G d de          Z G d de          Z  G d de          Z! G d de          Z"d Z#defdZ$defdZ% G d d          Z&d Z' e'             dS )zc
Database models and management for Page Asist
Using SQLAlchemy with SQLite for persistent storage
    )create_engineColumnIntegerStringTextDateTimeBoolean
ForeignKey)declarative_base)sessionmakerrelationshipSession)datetimeN)Path)ListOptionalDictz
sqlite:///z/conversations.dbF)echo)
autocommit	autoflushbindc                   Z   e Zd ZdZdZ eedd          Z eed          Z ee	e
j                  Z ee	d          Z eed          Z eed          Z eed          Z eed          Z eed          Z ee          Z ed	d
d          Z edd
d          ZdS )DBConversationu!   Model pentru conversații salvateconversationsTprimary_keyindexFnullabledefaultr   	DBMessageconversationzall, delete-orphan)back_populatescascadeDBAgentN)__name__
__module____qualname____doc____tablename__r   r   idsubiectr   r   utcnow
start_timeend_timer   numar_rundenumar_agentitotal_mesajetotal_idei_unicer	   is_completedr   config_jsonr   messagesagents     LC:\Users\bruma\Desktop\Web_Page_Asist_App (1)\page_asist\backend\database.pyr   r      s       ++#M	D	5	5	5BfVe,,,G(/:::Jvh...H&5111K6'E222L6'1---Lvgq1116'5111L&,,K |KPdeeeH\)NL`aaaFFFr:   r   c                      e Zd ZdZdZ eedd          Z ee e	d                    Z
 eed          Z eed          Z eed          Z eed          Z eed          Z eed          Z edd	          Zd
S )r&   u2   Model pentru agenți AI folosiți în conversațier8   Tr   conversations.idFr   r   r$   N)r'   r(   r)   r*   r+   r   r   r,   r   r
   conversation_idipportrolmodel
max_tokenstimeoutr   r#   r9   r:   r;   r&   r&   ,   s        <<M	T	6	6	6BfVZZ0B%C%CDDO		'	'	'B6&5)))D
&%
(
(
(CF6E***E%000JfWu---G  < 0JJJLLLr:   r&   c                   6   e Zd ZdZdZ eedd          Z ee e	d                    Z
 eed          Z eed          Z eed          Z eed          Z eed          Z eed	          Z eeej        	          Z ed
d          ZdS )r"   u&   Model pentru mesajele din conversațiir7   Tr   r=   Fr   r   r    r   r>   N)r'   r(   r)   r*   r+   r   r   r,   r   r
   r?   runda	agent_url
agent_roler   contenttokensidei_noir   r   r.   	timestampr   r#   r9   r:   r;   r"   r"   =   s        00M	T	6	6	6BfVZZ0B%C%CDDOF7U+++Ev...I///JfTE***GVGd+++Fvgq)))Hx999I  < 0LLLLLLr:   r"   c                       e Zd ZdZdZ eedd          Z ee e	d                    Z
 eedd          Z eed          Z eeej        	          Zd
S )DBIdeau2   Model pentru ideile unice extrase din conversațiiideasTr   r=   F)r   uniquer   r    N)r'   r(   r)   r*   r+   r   r   r,   r   r
   r?   	idea_textfirst_mentioned_roundr   r   r.   
created_atr9   r:   r;   rO   rO   O   s        <<M	T	6	6	6BfVZZ0B%C%CDDOvd;;;I"F7U;;;(/:::JJJr:   rO   c                  P    t           j                            t                     dS )u"   Creează tabelele în baza de date)r   N)Basemetadata
create_allenginer9   r:   r;   create_tablesrZ   [   s!    M&)))))r:   returnc               #      K   t                      } 	 | V  |                                  dS # |                                  w xY w)u:   Dependency pentru obținerea unei sesiuni de bază de dateN)SessionLocalclosedbs    r;   get_dbra   `   s@      	B









s	   , Ac                      t                      S )u<   Obține o sesiune de bază de date pentru utilizare directă)r]   r9   r:   r;   get_db_sessionrc   i   s    >>r:   c                   X   e Zd ZdZededededee         dede	fd            Z
e	 	 ddedededededee         dedefd            Zededefd            Zededee	         fd            Zedee	         fd            Zededefd            Zededee	         fd            Zd	S )ConversationDBu9   Manager pentru operații de bază de date cu conversațiir?   r-   r1   agenticonfigr[   c                 X   t                      }	 t          | ||t          |          t          j        |                    }|                    |           |D ]Q}t          | |d         |d         |d         |d         |d         |d                   }|                    |           R|                                 |                    |           ||	                                 S # t          $ r}	|                                 |	d	}	~	ww xY w# |	                                 w xY w)
u.   Creează o conversație nouă în baza de date)r,   r-   r1   r2   r6   r@   rA   rB   rC   rD   rE   )r?   r@   rA   rB   rC   rD   rE   N)rc   r   lenjsondumpsaddr&   commitrefreshr^   	Exceptionrollback)
r?   r-   r1   rf   rg   r`   r#   
agent_dataagentes
             r;   create_conversationz"ConversationDB.create_conversationr   sA     	)"' [[ Jv..  L FF<    % 
 

$3!$'#F+"5)$W-),7&y1   uIIKKKJJ|$$$ HHJJJJ	  	 	 	KKMMMG	 HHJJJJs$   CC+ +
D5DDD D)Nr   rG   rH   rI   rJ   rK   rL   c           	      4   t                      }	 t          | ||||||          }|                    |           |                    t                                        t          j        | k                                              }	|	r|	xj        dz  c_        |	                                 |
                    |           ||                                 S # t          $ r}
|                                 |
d}
~
ww xY w# |                                 w xY w)u%   Adaugă un mesaj nou în conversație)r?   rG   rH   rI   rJ   rK   rL      N)rc   r"   rl   queryr   filterr,   firstr3   rm   rn   r^   ro   rp   )r?   rG   rH   rI   rJ   rK   rL   r`   messager#   rs   s              r;   add_messagezConversationDB.add_message   s!    	 /#%!  G FF7OOO 88N33::!_4 egg   /))Q.))IIKKKJJw HHJJJJ	  	 	 	KKMMMG	 HHJJJJs$   B4C 
C>#C99C>>D Dr4   c                    t                      }	 |                    t                                        t          j        | k                                              }|r:t          j                    |_        d|_	        ||_
        |                                 n(# t          $ r}|                                 |d}~ww xY w|                                 dS # |                                 w xY w)u,   Marchează conversația ca fiind finalizatăTN)rc   rw   r   rx   r,   ry   r   r.   r0   r5   r4   rm   ro   rp   r^   )r?   r4   r`   r#   rs   s        r;   complete_conversationz$ConversationDB.complete_conversation   s     	88N33::!_4 egg   (0(9(9%,0)0@-		 	 	 	KKMMMG	 HHJJJJJBHHJJJJs*   B	B C 
B?$B::B??C C.c                    t                      }	 |                    t                                        t          j        | k                                              	 |                                 S # |                                 w xY w)u   Obține o conversație după IDrc   rw   r   rx   r,   ry   r^   r?   r`   s     r;   get_conversationzConversationDB.get_conversation   o     	88N++22!_4 egg HHJJJJBHHJJJJ   AA2 2Bc                  2   t                      } 	 |                     t                                        t          j                                                                                  	 |                                  S # |                                  w xY w)u$   Obține toate conversațiile salvate)rc   rw   r   order_byr/   descallr^   r_   s    r;   get_all_conversationsz$ConversationDB.get_all_conversations   sv     	88N++44)..00 cee HHJJJJBHHJJJJs   AB   Bc                    t                      }	 |                    t                                        t          j        | k                                              }|r@|                    |           |                                 	 |                                 dS 	 |                                 dS # t          $ r}|
                                 |d}~ww xY w# |                                 w xY w)u'   Șterge o conversație din baza de dateTFN)rc   rw   r   rx   r,   ry   deleterm   r^   ro   rp   )r?   r`   r#   rs   s       r;   delete_conversationz"ConversationDB.delete_conversation   s     	88N33::!_4 egg   		,'''		 HHJJJJJ  HHJJJJJ	  	 	 	KKMMMG	 HHJJJJs$   A8B6 6
C CCC C4c                    t                      }	 |                    t                                        t          j        | k                                              	 |                                 S # |                                 w xY w)u(   Obține o conversație cu toate mesajeler   r   s     r;   get_conversation_with_messagesz-ConversationDB.get_conversation_with_messages
  r   r   )Nr   )r'   r(   r)   r*   staticmethodstrintr   r   r   rt   r   r"   r{   r}   r   r   boolr   r   r9   r:   r;   re   re   o   s       CC))) ) T
	)
 ) 
) ) ) \)V  !%& &&& & 	&
 & & & 
& & & \&P    \. # (>2J    \ 4#7    \ S T    \(  @X    \  r:   re   c                      	 t                       t          d           dS # t          $ r} t          d|             Y d} ~ dS d} ~ ww xY w)u   Inițializează baza de datez!Database initialized successfullyzDatabase initialization error: N)rZ   printro   )rs   s    r;   init_databaser     sm    5122222 5 5 53334444444445s   ! 
AAA)(r*   
sqlalchemyr   r   r   r   r   r   r	   r
   sqlalchemy.ext.declarativer   sqlalchemy.ormr   r   r   r   rj   pathlibr   typingr   r   r   __file__parentBASE_DIRDATABASE_URLrY   r]   rV   r   r&   r"   rO   rZ   ra   rc   re   r   r9   r:   r;   <module>r      s~    c b b b b b b b b b b b b b b b b b b b 7 7 7 7 7 7 > > > > > > > > > >              ' ' ' ' ' ' ' ' ' ' 4>> '7H777 
|%	0	0	0|uFKKKb b b b bT b b b(K K K K Kd K K K"M M M M M M M M$; ; ; ; ;T ; ; ;* * *
        d d d d d d d dP5 5 5 r:   