
    j1                        d dl Z d dlZd dlZd dlZd dlZd dlmZ  ed           i ZdZde	fdZ
de	de	fd	Zd
e	fdZde	d
e	fdZde	d
e	fdZde	fdZde	de	d
efdZ	 dde	de	de	de	de	dede	de	d
e	fdZ	 dde	de	de	de	de	dede	fdZ	 dde	de	de	de	de	dede	de	fdZ	 dde	de	de	de	de	dede	de	fdZ	 dde	de	de	de	de	dede	de	fdZ	 dde	de	de	de	de	dede	de	fdZdS )     N)load_dotenvT)overridei,  	tenant_idc                     t                               |           }|sd S |d         t          j                    k     rt                               | d            d S |d         S )Nexpiresdb_name)_tenant_cachegettimepop)r   items     FC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\tenant_db.py
_cache_getr      s^    Y''D tI$ )T***t	?    r   c                 R    |t          j                     t          z   dt          | <   d S )N)r   r   )r   
_CACHE_TTLr	   r   r   s     r   
_cache_setr      s*    9;;+   M)r   returnc                      dt          j        dd           dt          j        dd           dt          j        dd	           dt          j        d
d           dt          j        dd           
S )u)   Main fyndo DB — has organizations tablepostgresql://MAIN_DB_USERpostgres:MAIN_DB_PASSWORDfyndo123@MAIN_DB_HOST192.168.12.40MAIN_DB_PORT5432/MAIN_DB_NAMEFyndoosgetenv r   r   	_main_dsnr)   &   s    	1	.*== 	1 	1	J\^h@i@i 	1 	1Ino66	1 	19;>SY9Z9Z	1 	1Ing..	1 	1r   c                     dt          j        dd           dt          j        dd           dt          j        dd	           dt          j        d
d           d|  
S )u3   Tenant specific DB — same host, different db_namer   r   r   r   r   r   r   r   r   r    r!   r"   r%   )r   s    r   _tenant_dsnr+   /   s~    		.*== 	 		J\^h@i@i 	 	Ino66	 	9;>SY9Z9Z	 		 	r   c                 >  K   t          |           }|rt          d|  d|            |S 	 t          j        t	                                 d {V }	 |                    dt          |                      d {V }|st          d|  d          |d         }t          | |           t          d|  d|            ||	                                 d {V  S # |	                                 d {V  w xY w# t          $ r}t          d	|             d }~ww xY w)
Nu   [TENANT] cache hit — u    → dsnz7SELECT db_name FROM organizations WHERE id = $1 LIMIT 1zTenant z not found in organizationsr   u   [TENANT] resolved — z[TENANT] lookup failed: )
r   printasyncpgconnectr)   fetchrowstr	Exceptionr   close)r   cachedconnrowr   es         r   get_tenant_db_namer:   <   s     	""F @	@@@@AAA_555555555	II       C  R P) P P PQQQ)nGy'***D9DD7DDEEE**,,$**,,   ,,,---s0   'C: A,C  C: C77C: :
DDDc                    K   t          |            d{V }t          j        t          |                     d{V S )z#Get asyncpg connection to tenant DBNr-   )r:   r0   r1   r+   r   s     r   get_tenant_connr<   V   sR      &y11111111G[%9%9::::::::::r   user_idc                   K   t          |            d {V }	 |                    dt          |                     d {V }|s2t          d| d           |d d|                                 d {V  S t          d|            t          |          |                                 d {V  S # |                                 d {V  w xY w)Nz3SELECT id, role_id FROM users WHERE id = $1 LIMIT 1z[TENANT] user z
 not found)idrole_idu   [TENANT] user validated — )r<   r2   r3   r/   r5   dict)r   r=   r7   r8   s       r   validate_userrB   `   s&      ++++++++DMMALL
 
 
 
 
 
 
 
  	467666777!d33 jjll 	6W66777Cyyjjlldjjlls   AB1 6 B1 1Cchat_idorganization_idworkspace_iduploaded_filesbatch_id
section_idc                   K   t          |            d {V }t          j        d |D                       }		 |                    dt	          t          j                              ||||||pd|	t          |          t          j        d|i                     d {V }
t          d|            t	          |
d                   |	                                 d {V  S # |	                                 d {V  w xY w)Nc                 8    g | ]}|                     d           S )filenamer
   ).0fs     r   
<listcomp>z&save_upload_tenant.<locals>.<listcomp>z   s$    FFF!AEE*--FFFr   a  
            INSERT INTO workspaceupload
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, filenames, total_files, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)
            RETURNING id
         rF   u+   [TENANT DB] workspaceupload saved — chat=r?   )
r<   jsondumpsr2   r3   uuiduuid4lenr/   r5   )r   rC   rD   r=   rE   rF   rG   rH   r7   	filenamesr8   s              r   save_upload_tenantrW   t   s3     
 !++++++++D
FF~FFFGGIMM # 
WlJX^YN0C0CJ(.9::
 
 
 
 
 
 
 
 	EGEEFFF3t9~~jjlldjjlls   BC C:resultc                 x  K   t          |            d {V }|                    dg           }t          d |D             i           }	|	                    d          pd}
	 |                    dt	          t          j                              ||||||
|	                    d          |	                    d          t          j        |          t          j        |                    di                     t          j        |                    d	i                     t          j        |                    d
i                                d {V  |
r|                    d|
|           d {V  t          d|            |
                                 d {V  d S # |
                                 d {V  w xY w)Nclassificationsc              3   D   K   | ]}|                     d           |V  dS )rG   NrL   )rM   cs     r   	<genexpr>z)save_three_boom_tenant.<locals>.<genexpr>   s3      BBj0A0AB!BBBBBBr   rG   rP   a=  
            INSERT INTO workspacethreeboom
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, product_name, plant,
             classifications, readiness_summary, extraction_summary, validate)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)
        product_nameplantreadiness_summaryextraction_summaryvalidatez7UPDATE workspaceupload SET batch_id=$1 WHERE chat_id=$2u.   [TENANT DB] workspacethreeboom saved — chat=)r<   r
   nextexecuter3   rS   rT   rQ   rR   r/   r5   )r   rC   rD   r=   rE   rX   rH   r7   rZ   firstrG   s              r   save_three_boom_tenantrf      s     
 !++++++++Djj!2B77OBB_BBBBGGEyy$$*Hll  
WlJXIIn%%uyy'9'9J''Jvzz"5r::;;Jvzz"6;;<<Jvzz*b1122
 
 	
 	
 	
 	
 	
 	
 	
   	,,I'         	HwHHIIIjjlldjjlls    D!F F9c                   K   t          |            d {V }|                    di           }		 |                    dt          t	          j                              ||||||p|                    d          pd|	                    dd          |	                    dd          |	                    dd          |	                    d	d          |	                    d
          t          j        |                     d {V  t          d|            |	                                 d {V  d S # |	                                 d {V  w xY w)Nsummarya'  
            INSERT INTO workspaceexceptions
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, total_exceptions, critical,
             major, minor, risk_level, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)
        rG   rP   total_exceptionsr   criticalmajorminor
risk_levelu/   [TENANT DB] workspaceexceptions saved — chat=
r<   r
   rd   r3   rS   rT   rQ   rR   r/   r5   )
r   rC   rD   r=   rE   rX   rG   rH   r7   ss
             r   save_exceptions_tenantrp      sr     
 !++++++++D

9b!!All  
WlJX=J!7!7=2EE$a((!%%
A*>*>EE'1quuWa00EE,F!3!3
 
 	
 	
 	
 	
 	
 	
 	
 	IIIJJJjjlldjjlls   C$D/ /Ec                   K   t          |            d {V }|                    di           }	|                    di           }
	 |                    dt          t	          j                              ||||||p|                    d          pd|	                    d          |
                    d          r3t          t          |
                    dd                    d	z            nd |                    d
          dt          j	        |                     d {V  t          d|            |                                 d {V  d S # |                                 d {V  w xY w)Ninvestigation_summary
trip_scorea  
            INSERT INTO workspacerac
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, risk_level, trip_score,
             approval_status, confirmed, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)
        rG   rP   rm   scorer   d   approval_statusFu(   [TENANT DB] workspacerac saved — chat=)r<   r
   rd   r3   rS   rT   intfloatrQ   rR   r/   r5   )r   rC   rD   r=   rE   rX   rG   rH   r7   rh   trips              r   save_rca_tenantrz      s     
 !++++++++Djj0"55G::lB''Dll  
WlJX=J!7!7=2KK%%6:hhw6G6GQCdhhw**++c1222TJJ())5Jv
 
 	
 	
 	
 	
 	
 	
 	
 	BBBCCCjjlldjjlls   C.E E+c                 6  K   t          |            d {V }	 |                    dt          t          j                              ||||||p|                    d          pd|                    d          |                    d          t          |                    dg                     dt          j        |                     d {V  t          d|            |
                                 d {V  d S # |
                                 d {V  w xY w)	Na  
            INSERT INTO workspacecapa
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, deviation_id, severity,
             total_actions, plan_status, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)
        rG   rP   deviation_idseveritycapa_actionsPendingu)   [TENANT DB] workspacecapa saved — chat=)r<   rd   r3   rS   rT   r
   rU   rQ   rR   r/   r5   )	r   rC   rD   r=   rE   rX   rG   rH   r7   s	            r   save_capa_tenantr      sF     
 !++++++++Dll  
WlJX=J!7!7=2JJ~&&

:(>(>

>2..//Jv
 
 	
 	
 	
 	
 	
 	
 	
 	C'CCDDDjjlldjjlls   CC< <Dc                   K   t          |            d {V }|                    di           }		 |                    dt          t	          j                              ||||||p|	                    d          pd|	                    d          |	                    d          |	                    d          |                    d          |                    d	          |                    d
          t          j        |                     d {V  t          d|            |	                                 d {V  d S # |	                                 d {V  w xY w)Nreport_metadataa@  
            INSERT INTO workspacereports
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, ref_id, severity, generated_date,
             pdf_filename, download_url, evidence_score, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)
        rG   rP   ref_idr}   generated_datepdf_filenamedownload_urlevidence_coverage_scoreu,   [TENANT DB] workspacereports saved — chat=rn   )
r   rC   rD   r=   rE   rX   rG   rH   r7   metas
             r   save_report_tenantr     s|     
 !++++++++D::',,Dll  
WlJX;*!5!5;HHX 4 4HH%&&JJ~&&

>(B(BJJ011Jv
 
 	
 	
 	
 	
 	
 	
 	
  	FWFFGGGjjlldjjlls   C4D? ?E)NN)N)r&   rQ   r0   r   rS   dotenvr   r	   r   r3   r   r   r)   r+   r:   r<   rA   rB   listrW   rf   rp   rz   r   r   r(   r   r   <module>r      s   				           T    
 
#    #     3              4;S ; ; ; ;3      . CG  #&69  %( =@ 		   B %)! !! !!#&!69! ! "! ! ! !V ;?  #&69    58   D ;?  #&69    58   H ;?  #&69    58   B ;?  #&69    58     r   