
    Eoh                         d dl 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mZ d dlmZ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  G d
 de      Zy)    N)datetime)	TIMESTAMPBooleanColumnDate
ForeignKeyIntegerStringTextfuncliteralselect)hybrid_methodhybrid_property)aliasedrelationship)r   )Role)UserPermissions)Basec                      e Zd ZdZdZ eeddd      Z e ed      ddd       Z	 e ed      d	
      Z
 e ed      d	dd      Z e ed      d
      Z e ed      d	
      Z e ed      d
      Z e ed      d
      Z e ed      d
      Z ee ed      d
      Z eed	
      Z eed	      Z e ed      dd      Z eed
      Z eed	ej4                        Z eed	ej4                  ej4                        Z eed
      Z edd      Z ed      Z  edddd      Z!e"d        Z#e#jH                  d        Z#e%d        Z&e&jH                  d        Z&y)Usersz#
    Database model for users.
    usersT)primary_keyindexautoincrement$   c                  <    t        t        j                               S N)struuiduuid4     Y/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/user/models/user_model.py<lambda>zUsers.<lambda>"   s    #djjlJ[ r#   )uniquer   defaultd   F)nullable)r)   r&   r         zfiles.id)r'   )r)   r   )r)   r'   )r)   r'   onupdateSessionuser)back_populatesFiler   z!Users.id==UserPermissions.user_id)primaryjoinr/   uselistc                 h    | j                   D cg c]  }|j                  j                   c}S c c}w )zG
        Returns a list of all roles associated with the user.
        )rolesroleslug)selfr5   s     r$   	all_roleszUsers.all_rolesE   s$    
 ,0::64		666s   /c                 t   t        t        j                  t        j                              j                  t              j                  t        t        j                  t        j                  k(        j                  t        j                  | j                  k(        j                  |       j                         S )zK
        SQL expression to get all roles associated with the user.
        )r   r   	array_aggr   r6   select_fromjoinr   role_ididwhereuser_id	correlatescalar_subquery)clss    r$   r8   zUsers.all_rolesL   sm     4>>$)),-[T/?#:#:dgg#EFU?**cff45Ys^_	
r#   c                     || j                   v S r   )r8   )r7   r6   s     r$   has_rolezUsers.has_roleZ   s    t~~%%r#   c                 f   t        t        d            j                  t              j	                  t
        t        j                  t
        j                  k(        j                  t        j                  | j                  k(        j                  t
        j                  |k(        j                         S )NT)r   r   r;   r   r<   r   r=   r>   r?   r@   r6   exists)rC   r6   s     r$   rE   zUsers.has_role^   sm     74=![)T$//477:;U?**cff45U499$%VX	
r#   N)'__name__
__module____qualname____doc____tablename__r   r	   r>   r
   r@   usernameemailphonepassword
first_name	last_namegenderr   	avatar_idr   	is_activeis_verifiedverification_tokenr   verification_token_expires_atr   utcnow
created_at
updated_at
deleted_atr   sessionsavatarr4   r   r8   
expressionr   rE   r"   r#   r$   r   r      s    M	TT	JBVBZDB[\GfSkE2H6#;t4HE6":-EfSkE2Hsd3Jvc{T2IF2J.Fw
: 6FIw/I%0Ksd$G$*9t$D!	E8??KJ	E8??U]UdUdeJ	D1J If=H&!F7	E 7 7 
 
 & & 
 
r#   r   )r    r   
sqlalchemyr   r   r   r   r   r	   r
   r   r   r   r   sqlalchemy.ext.hybridr   r   sqlalchemy.ormr   r   sqlalchemy.sql*src.apps.role_permission.models.role_modelr   5src.apps.role_permission.models.user_permission_modelr   src.core.models.baser   r   r"   r#   r$   <module>rg      sB         A 0 ! ; Q %M
D M
r#   