
    Xj                        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 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  ee          Z ede          Z ede          Z ede          Z G d deeeef                   ZdS )    )AnyGenericTypeVar)jsonable_encoder)	BaseModel)or_)IntegrityError)Session)ConstraintViolationError)Base)User)
get_logger	ModelType)boundCreateSchemaTypeUpdateSchemaTypec                      e Zd Zdee         fdZd)dedededz  dedz  fdZ	d	d
ddddddede
de
dedz  deeef         dz  dedz  dedee         fdZddddededz  deeef         dz  de
fdZdddddedede
dz  de
dz  dedefdZdddededeeeef         z  dedef
dZddddede
d edededz  f
d!Zdddded"ee
         de
d edede
fd#Zdedefd$Zd	d
dd%ded&ed'ee         de
de
dedz  dee         fd(ZdS )*CRUDBasemodelc                     || _         d S N)r   )selfr   s     5/lsinfo/ai/hellotax_ai/base_platform/app/crud/base.py__init__zCRUDBase.__init__   s    


    Ndbidcurrent_userreturnc                     |                     | j                                      | j        j        |k              }|r|                     |||          }|                                S r   )queryr   filterr   _apply_permission_filterfirst)r   r   r   r   r!   s        r   getzCRUDBase.get   sZ    $$++DJMR,?@@ 	K11%rJJE{{}}r   r   d   T)skiplimitr   filtersorder_by
order_descr'   r(   r)   r*   r+   c                   |                     | j                  }|r|                     |||          }|r)|                                D ]\  }	}
t	          | j        |	          rt          |
t                    r<|                    t          | j        |	          	                    |
                    }lt          |
t                    rf|
                    d          rQ|
                    d          r<|                    t          | j        |	                              |
                    }|                    t          | j        |	          |
k              }|rht	          | j        |          rSt          | j        |          }|                    |r|                                n|                                          }nFt	          | j        d          r1|                    | j        j                                                  }|                    |                              |                                          S )N%
created_at)r!   r   r#   itemshasattr
isinstancelistr"   getattrin_str
startswithendswithliker*   descascr.   offsetr(   all)r   r   r'   r(   r   r)   r*   r+   r!   fieldvalueorder_fields               r   	get_multizCRUDBase.get_multi    s    $$ 	K11%rJJE 	R ' R Ru4:u-- R!%.. R %WTZ-G-G-K-KE-R-R S S#E3// RE4D4DS4I4I Renn]`NaNa R %WTZ-G-G-L-LU-S-S T T %WTZ-G-G5-P Q Q 	A
H55 	A!$*h77KNN#Z;#3#3#5#5#5IZIZ[[EETZ.. 	ANN4:#8#=#=#?#?@@E||D!!''..22444r   )r   r)   c                   |                     | j                  }|r|                     |||          }|r)|                                D ]\  }}t	          | j        |          rt          |t                    r<|                    t          | j        |          	                    |                    }lt          |t                    rf|                    d          rQ|                    d          r<|                    t          | j        |                              |                    }|                    t          | j        |          |k              }|                                S Nr-   )r!   r   r#   r/   r0   r1   r2   r"   r3   r4   r5   r6   r7   r8   count)r   r   r   r)   r!   r=   r>   s          r   	get_countzCRUDBase.get_count>   sN    $$ 	K11%rJJE 	R ' R Ru4:u-- R!%.. R %WTZ-G-G-K-KE-R-R S S#E3// RE4D4DS4I4I Renn]`NaNa R %WTZ-G-G-L-LU-S-S T T %WTZ-G-G5-P Q Q{{}}r   )
created_by	tenant_idcommitobj_inrE   rF   rG   c                   t          |          }|rt          | j        d          r||d<   |t          | j        d          r||d<    | j        di |}|                    |           |r	 |                                 |                                 |                    |           |                    |           |                    |           t          	                    | j        j
        |j                                      d           ni# t          $ r\}|                                 t          |d          rt          |j                  nt          |          }	t#          |	          d d }~ww xY w|S )NrE   rF   r   r   zRecord createdorig )r   r0   r   addflushrG   expungerefreshloggerbind__name__r   infor	   rollbackr5   rK   r   )
r   r   rH   rE   rF   rG   obj_in_datadb_objeconstraint_names
             r   createzCRUDBase.createS   su    'v.. 	3'$*l;; 	3(2K% WTZ%E%E '0K$**k**
v 	J
J


		

6"""v

6"""$*"5&)DDIIJZ[[[[! J J J18F1C1C"O#af+++Q.??TIJ s   .B%D 
E:AE55E:)rG   rW   c                   t          |          }t          |t                    r|}n|                    d          }|D ]}||v rt	          ||||                    |                    |           |rg|                                 |                    |           t          	                    | j
        j        |j                                      d           |S )NT)exclude_unsetrJ   zRecord updated)r   r1   dict
model_dumpsetattrrM   rG   rP   rQ   rR   r   rS   r   rT   )r   r   rW   rH   rG   obj_dataupdate_datar=   s           r   updatezCRUDBase.updateq   s     $F++fd## 	@ KK ++$+??K 	; 	;E##{5'9:::
v 	XIIKKKJJvKKdj1fiK@@EEFVWWWr   F)softrG   rc   c                   |                     | j                                      | j        j        |k                                              }|sd S |r2t          | j        d          rd|_        |                    |           n|                    |           |rN|	                                 t                              | j        j        ||                              d           |S )N
is_deletedT)r   r   rc   zRecord deleted)r!   r   r"   r   r$   r0   re   rM   deleterG   rQ   rR   rS   rT   )r   r   r   rc   rG   objs         r   rf   zCRUDBase.delete   s     hhtz""))$*-2*=>>DDFF 	4 	GDJ55 	!CNFF3KKKKIIcNNN 	\IIKKKKKdj1btKDDIIJZ[[[
r   idsc                   |                     | j                                      | j        j                            |                    }t          | j        d          r#|                    | j        j        |k              }t          | j        d          r3|j        dk    r(|                    | j        j        |j        k              }|r/t          | j        d          r|	                    ddid          }n|
                    d          }|rN|                                 t                              | j        j        ||                              d	           |S )
NrF   rE   platform_adminre   TF)synchronize_session)r   rC   rc   zRecords batch deleted)r!   r   r"   r   r4   r0   rF   rolerE   rb   rf   rG   rQ   rR   rS   rT   )	r   r   rh   rF   r   rc   rG   r!   rC   s	            r   delete_multizCRUDBase.delete_multi   s8    $$++DJM,=,=c,B,BCC4:{++ 	DLL!5!BCCE4:|,, 	K1BFV1V1VLL!6,/!IJJE 	<GDJ55 	<LL,!55LQQEELLUL;;E 	iIIKKKKKdj1TKJJOOPghhhr   c                 ~   t          | j        d          r#|                    | j        j        dk              }|j        dk    r|S t          | j        d          rb|j        3|                    | j        j                            d                     }n(|                    | j        j        |j        k              }|S )Nre   Frj   rF   )r0   r   r"   re   rl   rF   is_)r   r!   r   r   s       r   r#   z!CRUDBase._apply_permission_filter   s    4:|,, 	ALL!6%!?@@E 000L4:{++ 	U%-TZ%9%=%=d%C%CDDTZ%9\=S%STTr   )r'   r(   r   search_termsearch_fieldsc                   |                     | j                  }|r|                     |||          }g }|D ]V}	t          | j        |	          r?|                    t          | j        |	                              d| d                     W|r|                    t          |           }|	                    |          
                    |                                          S rB   )r!   r   r#   r0   appendr3   r8   r"   r   r;   r(   r<   )
r   r   rp   rq   r'   r(   r   r!   search_conditionsr=   s
             r   searchzCRUDBase.search   s     $$ 	K11%rJJE" 	^ 	^Etz5)) ^!((U)C)C)H)HI[[I[I[I[)\)\]]] 	:LL&7!899E||D!!''..22444r   r   )rS   
__module____qualname__typer   r   r
   r   r   r%   intr]   r5   boolr2   r@   rD   r   rZ   r   rb   rf   rm   r#   ru   rL   r   r   r   r      s       d9o     g 3 dTk YY]M]     $()-#5 5 55 	5
 5 Tk5 c3h$&5 *5 5 
i5 5 5 5D %))-   Tk	
 c3h$& 
   4 "& $   !	
 $J :  
   H    	
 !4S>1  
   0 5:$  "%-1CG	T	   .    #Y	
    
   0
D 
g 
 
 
 
$ $(5 5 55 	5
 Cy5 5 5 Tk5 
i5 5 5 5 5 5r   r   N)typingr   r   r   fastapi.encodersr   pydanticr   
sqlalchemyr   sqlalchemy.excr	   sqlalchemy.ormr
   app.core.exceptionsr   app.models.baser   app.models.userr   common_loggingr   rS   rQ   r   r   r   r   rL   r   r   <module>r      s`   ( ( ( ( ( ( ( ( ( ( - - - - - -             ) ) ) ) ) ) " " " " " " 8 8 8 8 8 8                         % % % % % %	H		GKt,,,	7-Y??? 7-Y??? z5 z5 z5 z5 z5wy"24DDE z5 z5 z5 z5 z5r   