
    Xj                         d dl mZ d dl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mZ d dlmZ d d	lmZ  ee          Z G d
 dee
eef                   Z ee
          ZdS )    )Session)get_password_hashverify_password)CRUDBase)Role)User)UserRole)
UserCreate
UserUpdate)RBACBootstrapService)
get_loggerc                   p   e Zd Zdddedededz  dedz  fdZdddedededz  dedz  fd	Zd
dddedededede	e         f
dZ
ddddedededz  dedef
dZdededededz  fdZdddededededef
dZdedefdZdedefdZdedefdZdedede	e         fd Zdeded!e	e         ddfd"ZdS )#CRUDUserN)	tenant_iddbemailr   returnc                    |                     t                                        t          j        |k              }|#|                    t          j        |k              }|                                S N)queryr   filterr   r   first)selfr   r   r   r   s        5/lsinfo/ai/hellotax_ai/base_platform/app/crud/user.pyget_by_emailzCRUDUser.get_by_email   sT     %%djE&9:: LL9!<==E{{}}    usernamec                    |                     t                                        t          j        |k              }|#|                    t          j        |k              }|                                S r   )r   r   r   r   r   r   )r   r   r   r   r   s        r   get_by_usernamezCRUDUser.get_by_username   sT     %%dmx&?@@ LL9!<==E{{}}r   r   d   )skiplimitr!   r"   c                    |                     t                                        t          j        |k                                  |                              |                                          S r   )r   r   r   r   offsetr"   all)r   r   r   r!   r"   s        r   get_by_companyzCRUDUser.get_by_company!   sR     xx~~$$T^y%@AAHHNNTTUZ[[__aaar   T)
created_bycommitobj_inr'   r(   c                   t          |j        |j        t          |j                  |j        |j                  }|                    |           |r|                                 |	                    |           t                              |j                                      d           	 t          j        ||           n4# t           $ r'}t                              d|            Y d }~nd }~ww xY w|S )N)r   namehashed_passwordr   roleuser_idzUser createdzFailed to assign role: )r   r   r+   r   passwordr   r-   addr(   refreshloggerbindidinfor   sync_user_role_binding	Exceptionwarning)r   r   r)   r'   r(   db_objes          r   createzCRUDUser.create&   s     ,-fo>>&
 
 
 	v 	>IIKKKJJvKK	K**//???>$;BGGGG > > ><<<========>s   /C 
C6C11C6r0   c                j    |                      ||          }|sd S t          ||j                  sd S |S )N)r   )r   r   r,   )r   r   r   r0   users        r   authenticatezCRUDUser.authenticate@   sF      5 11 	4x)=>> 	4r   )r(   r>   new_passwordc                   t          |          |_        |                    |           |r\|                                 |                    |           t
                              |j                                      d           |S )Nr.   zUser password updated)	r   r,   r1   r(   r2   r3   r4   r5   r6   )r   r   r>   r@   r(   s        r   update_passwordzCRUDUser.update_passwordH   su      1>>
t 	GIIKKKJJtKKK((--.EFFFr   c                     |j         S r   )	is_activer   r>   s     r   rD   zCRUDUser.is_activeS   s
    ~r   c                     |j         dk    S )Nplatform_adminr-   rE   s     r   is_platform_adminzCRUDUser.is_platform_adminV       y,,,r   c                     |j         dk    S )Ncustomer_adminrH   rE   s     r   is_customer_adminzCRUDUser.is_customer_adminY   rJ   r   r/   c                   |                     t                                        t          j        |k    t          j                                                   }d |D             }|sg S |                     t                                        t          j                            |          t          j                                                   S )Nc                     g | ]	}|j         
S  )role_id).0urs     r   
<listcomp>z&CRUDUser.get_roles.<locals>.<listcomp>b   s    4442BJ444r   )	r   r	   r   r/   
is_deletedr%   r   r5   in_)r   r   r/   
user_rolesrole_idss        r   	get_roleszCRUDUser.get_roles\   s    HHXVH$/X5H1HIISUU 	
 54444 	Ixx~~$$TW[[%:%:<OPPTTVVVr   rX   c                   |                     t                                        t          j        |k    t          j                                                   }|D ]	}d|_        
|D ](}t          ||          }|                    |           )|                                 t          	                    |          
                    d           d S )NT)r/   rQ   r.   zUser roles updated)r   r	   r   r/   rU   r%   r1   r(   r3   r4   r6   )r   r   r/   rX   existingrS   rQ   	user_roles           r   update_roleszCRUDUser.update_rolesg   s    HHXVH$/X5H1HIISUU 	
  	! 	!B BMM 	 	G 'BBBIFF9
		G$$))*>?????r   )__name__
__module____qualname__r   strintr   r   r   listr&   r
   boolr<   r?   rB   rD   rI   rM   r   rY   r]   rP   r   r   r   r      s        CG  %(584Z	    FJ  (+8;d
	    ;<#b b bb),b47bDGb	db b b b "&   	
 $J  
   4w #  PT     MQ	 	 		$(	8;	EI			 	 	 	d t    -d -t - - - --d -t - - - -	WG 	W 	Wd 	W 	W 	W 	W@w @C @49 @QU @ @ @ @ @ @r   r   N)sqlalchemy.ormr   app.core.securityr   r   app.crud.baser   app.models.roler   app.models.userr   app.models.user_roler	   app.schemas.userr
   r   *app.services.access.rbac_bootstrap_servicer   common_loggingr   r^   r3   r   r>   rP   r   r   <module>rn      s   " " " " " " @ @ @ @ @ @ @ @ " " " " " "                         ) ) ) ) ) ) 3 3 3 3 3 3 3 3 K K K K K K % % % % % %	H		d@ d@ d@ d@ d@xj*45 d@ d@ d@N x~~r   