
    Eoh=                         d dl mZmZ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mZ d dlmZ d dlmZ d d	lmZ d d
lmZ dededee   fdZdeddfdZdeddfdZy)    )DictListSet)or_)Session)DEFAULT_PERMISSIONSDEFAULT_ROLES
Permission)Roleroles_permissions_map)UserPermissions)RoleCreateRequestSchema)create_role)Usersdbuser_idreturnc                    K   | j                  t              j                  t        j                  |k(        j	                         }|s
t               S | j                  t              j                  t        j                  |j                  k(        j                         }|D cg c]  }|j                  |j                   }}|D cg c]  }|j                  |j                   }}|rY| j                  t              j                  t        j                  j                  j                  |            j                         ng }|D cg c]  }|j                   }	}t        ||	z         }
|
rO| j                  t              j                  t        j                  j                  |
            j                         ng }|D ch c]  }|j                  s|j                    }}|S c c}w c c}w c c}w c c}w w)zd
    Get all permission operations for a user
    Returns a set of permission operation strings
    )queryr   filterr   firstsetr   idallrole_idpermission_idr   cin_r   	is_active	operation)r   r   useruser_permissionsuprole_idsdirect_permission_idsrole_permission_entriesrprole_permission_idsall_permission_idspermissionsppermission_operationss                 n/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/role_permission/services/permission_service.pyget_user_permissionsr/      s    
 88E?!!%--7":;AACDuxx0778O8OSWSZSZ8Z[__a%5Pr9O

PHP8Hi"BL\L\LhR--ii hp&'../D/F/F/N/N/R/RS[/\]aacuw  7NN2++NN25HHI^p"((:&--jmm.?.?@R.STXXZvxK2=MQQ[[MM   Qi O NsJ   B!G>#G*5G*G>	G/G/)A#G>G4A'G>G9G9&G>Nc           	      B  K   | j                  t              j                         D ci c]  }|j                  |j                  f| c}g }t        t        d t        fdt                          }|r"| j                  |       | j                          yyc c}w w)z
    Create default permissions in the database using bulk operations
    This function should be called during application startup
    c                 B    t        | d   | d   | d   | d   | d   d      S )Nmodule	submoduler!   operation_labeldisplay_orderT)r2   r3   r!   r4   r5   r    r
   )perms    r.   <lambda>z*seed_default_permissions.<locals>.<lambda>;   s6    H~{+{+ $%6 7"?3     c                     | d   | d   fvS )Nr2   r!    )r6   existing_permissionss    r.   r7   z*seed_default_permissions.<locals>.<lambda>C   s    hk1B CK_ _ r8   N)r   r   r   r2   r!   listmapr   r   add_allcommit)r   r,   permissions_to_addr;   s      @r.   seed_default_permissionsrA   /   s      AC@T@X@X@Z[1QXXq{{3Q6[ _atu
	
 


%&
		 % \s   &B B	ABc           
        K   ddd}| j                  t              j                  t        j                  dk(        j	                         }|D ci c]  }|j
                  |j                   }}t        D ]  }| j                  t              j                  t        j                  |d   k(        j                         }|rL|d   dgk(  r|D cg c]  }|j                   }}n|d   D cg c]  }||v s||    }}t        |d   |d   |j                  d	d      |
      }		 t        | |	|ddd       d{     yc c}w c c}w c c}w 7 # t        $ r(}
t        d|d    dt!        |
              Y d}
~
d}
~
ww xY ww)z
    Create default roles with their permissions from the data file
    This function will create roles regardless of whether users exist
    Nsystem)r   r   Tslugr+   *label
is_default)rF   rD   rG   r+   )r   payloadcurrent_user
return_raw
is_seedinguse_provided_slugzFailed to create role z: )r   r   r   r    r   r!   r   r	   r   rD   r   r   getr   	Exceptionprintstr)r   seeding_user_dictall_permissionsr,   r*   role_defexisting_rolepermission_idsoprole_payloades              r.   &create_admin_role_with_all_permissionsrY   L   s      $9hhz*11*2F2F$2NOSSUO5DE!++qtt+EE! --dii8F;K.KLRRTM"se+,;<qadd<N<?G?VsZ\`rZr04sNs.7#&!||L$7&	
	$."&  % F =s  	*8G+<*=RAxHI	sm   AFE -A!FE!
F+	E
5E
<'F$E8E9E=FE	FE=7F=FF)typingr   r   r   
sqlalchemyr   sqlalchemy.ormr   .src.apps.role_permission.data.permissions_datar   r	   0src.apps.role_permission.models.permission_modelr   *src.apps.role_permission.models.role_modelr   r   5src.apps.role_permission.models.user_permission_modelr   )src.apps.role_permission.schemas.requestsr   .src.apps.role_permission.services.role_servicer   src.apps.user.models.user_modelr   rP   r/   rA   rY   r:   r8   r.   <module>rd      so    " "  " H R Q M F 1!7 !S !SX !:w 4 :'W ' 'r8   