
    {i                        d Z ddlmZ ddlmZmZ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 ddlZddlZ e       Zej*                  j-                  ej*                  j/                  e      dd      Z G d	 d
e      Z G d d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 Z!ej*                  jE                  e      s e         yy)z^
Case Management Models for AI Lawyer
SQLAlchemy models for case-specific document management
    )datetime)
create_engineColumnIntegerStringDateTimeJSON
ForeignKeyTextBooleanFloat)declarative_base)relationshipsessionmakerNdatazai_lawyer.dbc                       e Zd ZdZ eed      Z e ed      dd      Z e ed      d      Z	 e ed	      d
      Z
 eed      Z eeej                        Z ee      Z eddd      Zy)UserusersTprimary_key   F)uniquenullable@   r   2   freedefaultr   Caseuserall, delete-orphanback_populatescascadeN)__name__
__module____qualname____tablename__r   r   idr   emailapi_keysubscription_tierquery_countr   r   utcnow
created_at
last_loginr   cases     1/var/www/html/eventheodds/ai-lawyer-rag/models.pyr   r      s}    M	T	*B6#;te<EVBZ-Gvbz6:!,K(//:J!J @TUEr4   r   c                      e Zd ZdZ eed      Z e ed      dd       Z ee e	d            Z
 e ed      d	
      Z ee      Z e ed            Z e ed            Z e ed            Z e ed      d      Z eeej(                        Z eeej(                  ej(                        Z edd      Z eddd      Z eddd      Z edd	dd      Zy)r    r2   Tr   $   c                  <    t        t        j                               S )N)struuiduuid4r3   r4   r5   <lambda>zCase.<lambda>#   s    DJJL@Q r4   )r   r   zusers.idr   Fr   d   r   activer   )r   onupdater   r$   CaseDocumentcaser"   r#   	CaseQueryCaseMetadata)uselistr$   r%   N)r&   r'   r(   r)   r   r   r*   r   	case_uuidr
   user_idnamer   descriptionjurisdictioncase_numberarea_of_lawstatusr   r   r/   r0   
updated_atr   r!   	documentsqueriesmetadata_recordr3   r4   r5   r    r        s    M	T	*Bvbz$8QRIWj45G &+.D,K&+&L%K%KF2J1F (//:J(//HOOTJ w7D^FL`aI;vG[\G">5QWauvOr4   r    c                      e Zd ZdZ eed      Z ee ed            Z e e	d      d      Z
 e e	d      d      Z e e	d            Z ee      Z e e	d	            Z e e	d
            Z e e	d
            Z e e	d
      d      Z ee      Z eed      Z ee      Z ee      Z eeej2                        Z ee      Z edd      Z eddd      Zy)rB   case_documentsTr   cases.idr   Fr=      r   r   pendingr   r   r    rP   rA   DocumentChunkdocumentr"   r#   N)r&   r'   r(   r)   r   r   r*   r
   case_idr   filenameoriginal_filename	file_type	file_size	file_hashdocument_typecategoryprocessing_statusr   processing_errorchunk_countchunk_start_indexchunk_end_indexr   r   r/   upload_dateprocessed_dater   rC   chunksr3   r4   r5   rB   rB   9   s   $M	T	*BWj45G fSkE2Hvc{U;vbz"IwIvbz"I 6":&MfRj!H vbz9=d|!,K wWoO 8??;KH%N {;D/*NbcFr4   rB   c                   &   e Zd ZdZ eed      Z ee ed            Z ee      Z	 ee
      Z ee      Z ee      Z ee      Z ee      Z ee
      Z ee      Z ee      Z ee      Z eed      Z e ed            Z edd	
      Zy)rX   document_chunksTr   zcase_documents.idFr   r   rB   ri   rA   N)r&   r'   r(   r)   r   r   r*   r
   document_idchunk_indexr   contentcontent_lengthpage_number
start_charend_charsummaryr	   
key_pointsthemesentitiesr   enrichedr   embedding_idr   rY   r3   r4   r5   rX   rX   [   s    %M	T	*B*-@"ABK /KTlGG_N /KJgH TlGJD\Fd|Hgu-H &*%L N8DHr4   rX   c                       e Zd ZdZ eed      Z ee ed            Z ee	d      Z
 e ed            Z ee	      Z ee      Z ee      Z ee      Z ee      Z eeej,                        Z ed	d
      Zy)rD   case_queriesTr   rU   Fr=   r   r   r    rQ   rA   N)r&   r'   r(   r)   r   r   r*   r
   rZ   r   
query_textr   
query_typeresponser	   sourcesr   confidence_scoreresponse_timechunks_searchedr   r   r/   	timestampr   rC   r3   r4   r5   rD   rD   x   s    "M	T	*BWj45G u-Jr
#J d|HTlGe} 5MMWoO x9I y9Dr4   rD   c                       e Zd ZdZ eed      Z ee ed      d      Z ee	      Z
 ee	      Z ee	      Z ee	      Z ee	      Z ee	      Z ee	      Z ee      Z ee	      Z edd      Zy	)
rE   case_metadataTr   rU   r   r    rR   rA   N)r&   r'   r(   r)   r   r   r*   r
   rZ   r	   parties	key_datesclaimsdefensesdamages
key_issues	key_factsr   document_summarystrength_assessmentr   rC   r3   r4   r5   rE   rE      s    #M	T	*BWj4TBG TlGtID\Fd|HTlGJtI d| , /@ADr4   rE   c                      t        j                  t         j                  j                  t              d       t        dt         d      } t        j                  j                  |        | S )z)Initialize the database and create tablesT)exist_ok
sqlite:///Fecho)	osmakedirspathdirnameDB_PATHr   Basemetadata
create_all)engines    r5   init_dbr      sG    KK(48Zy1>FMMV$Mr4   c                  P    t        dt         d      } t        |       } |       S )zGet a database sessionr   Fr   )bind)r   r   r   )r   Sessions     r5   get_sessionr      s'    Zy1>F'G9r4   )#__doc__r   
sqlalchemyr   r   r   r   r   r	   r
   r   r   r   sqlalchemy.ext.declarativer   sqlalchemy.ormr   r   r:   r   r   r   joinr   __file__r   r   r    rB   rX   rD   rE   r   r   existsr3   r4   r5   <module>r      s   
  o o o 7 5  	 '',,rwwx0&.
IV4 Vw4 w2d4 dDED E:: :2B4 B. 
ww~~gI r4   