o
    "ig                     @   s~   d 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mZ G dd	 d	ee
eef Zee
Zd
S )z
Role CRUD operations
    )ListOptional)Session
joinedload)CRUDBase)Role)RoleMenu)
RoleCreate
RoleUpdatec                
   @   s   e Zd ZdZddddedededee fd	d
Zdede	de
e fddZdededee fddZdededee ddfddZdedede
e fddZdS )CRUDRolezCRUD operations for Roler   d   )skiplimitdbr   r   returnc                K   s.   | | j| jjdk}||| S )z
        Get multiple roles without permission filtering
        Roles are in public schema and accessible to all authenticated users
        F)querymodelfilter
is_deletedoffsetr   all)selfr   r   r   kwargsr    r   5/lsinfo/ai/hellotax_ai/base_platform/app/crud/role.py	get_multi   s   zCRUDRole.get_multicodec                C   s"   | ttj|ktjdk S )zGet role by codeF)r   r   r   r   r   first)r   r   r   r   r   r   get_by_code   s   "zCRUDRole.get_by_coderole_idc                C   s0   | ttj|ktjdk }dd |D S )zGet menu IDs for a roleFc                 S   s   g | ]}|j qS r   )menu_id).0rmr   r   r   
<listcomp>(   s    z&CRUDRole.get_menus.<locals>.<listcomp>)r   r   r   r   r   r   )r   r   r   
role_menusr   r   r   	get_menus"   s   
zCRUDRole.get_menusmenu_idsNc                C   s^   | ttj|ktjdk }|D ]}d|_q|D ]}t||d}|| q|  dS )zUpdate menus for a roleFT)r   r    N)r   r   r   r   r   r   addcommit)r   r   r   r&   existingr"   r    	role_menur   r   r   update_menus*   s   
zCRUDRole.update_menusc                C   s.   | tttjtj|ktjdk S )zGet role with menus loadedF)	r   r   optionsr   r$   r   idr   r   )r   r   r   r   r   r   get_with_menus;   s
   
zCRUDRole.get_with_menus)__name__
__module____qualname____doc__r   intr   r   r   strr   r   r%   r+   r.   r   r   r   r   r      s"    
r   N)r2   typingr   r   sqlalchemy.ormr   r   app.crud.baser   app.models.roler   app.models.role_menur   app.schemas.roler	   r
   r   roler   r   r   r   <module>   s    6