
    ]i(                     (   d dl mZmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZ dded	edz  d
ee   fdZdededed
efdZdeded
efdZdedededed
ef
dZdededed
dfdZdeded
ee	   fdZdededee   ded
ee	   f
dZy)    )IntegrityErrorSQLAlchemyError)AsyncSession)AksiEnum	ModulEnumRoleRolePermission)User)role_repository)PermissionItem
RoleCreate
RoleUpdateNdbspbu_idreturnc                 J   K   t        j                  | |       d {   S 7 wN)r   get_all)r   r   s     ;/var/www/html/spbu.com/backend/app/services/role_service.py
list_rolesr   
   s      ((W5555s   #!#dataactorc                 f  K   |j                   H|j                  s<|j                  D ch c]  }|j                    }}|j                   |vr.t        d      |j                   |j                  st        d      	 t	        j
                  | |j                  |j                  |j                   d       d {   }| j                          d {    |S c c}w 7 #7 # t        $ r% | j                          d {  7   t        d      t        $ r | j                          d {  7    w xY ww)NzTidak punya akses ke SPBU iniz0Hanya Super Admin yang dapat membuat role globalF)nama	deskripsir   	is_system Data role konflik atau sudah ada)r   is_superadminassignmentsPermissionErrorr   creater   r   commitr   rollback
ValueErrorr   )r   r   r   aassigned_idsresults         r   create_roler(      s    ||(;(;+0+<+<=+<a		+<=<<|+!"ABB		e&9&9PQQ&--nnLL
 
 iik >
 	 =kkm;<< kkmsc   'D1C>D1;;C 6C7C CC D1C C D.:C=;+D.&D)'D..D1role_idc                 h   K   t        j                  | |       d {   }|st        d      |S 7 w)NzRole tidak ditemukan)r   	get_by_idr$   )r   r)   roles      r   get_roler-   '   s4      **2w77D/00K 8s   202c                   K   t        | |       d {   }|j                  d      }|j                  r1|j                  dd        |j                  dd        |st	        d      	 t        j                  | |fi | d {   }| j                          d {    |S 7 7  7 
# t        $ r% | j                          d {  7   t        d      t        $ r | j                          d {  7    w xY ww)NT)exclude_noner   r   z1Nama dan deskripsi role sistem tidak dapat diubahr   )r-   
model_dumpr   popr    r   updater"   r   r#   r$   r   )r   r)   r   r   r,   update_datar'   s          r   update_roler4   .   s      "g&&D//t/4K~~%T*!"UVV	&--b$F+FFiik ' G =kkm;<< kkmsd   C9B AC9'B& B"B& B$B& C9"B& $B& &C6C+C6.C1/C66C9c                 .  K   t        | |       d {   }|j                  rt        d      	 t        j                  | |d       d {    | j                          d {    y 7 U7 7 	# t        $ r | j                          d {  7    w xY ww)NzRole sistem tidak dapat dihapusF)hard_delete)r-   r   r    r   delete_roler"   r   r#   )r   r)   r   r,   s       r   r7   r7   E   s     "g&&D~~?@@))"dFFFiik ' 	G kkmsV   BA(BA. 
A*A. "A,#A. 'B*A. ,A. .B
BBBc                 v   K   t        | |       d {    t        j                  | |       d {   S 7 "7 wr   )r-   r   get_permissions)r   r)   s     r   r9   r9   Q   s7      2w
 00W===  =s   959799permissionsc                   K   t        | |       d {   }|D cg c]  }|j                  |j                  f }}	 t        j                  | ||       d {   }| j                          d {    |S 7 cc c}w 7 %7 # t        $ r% | j                          d {  7   t        d      t        $ r | j                          d {  7    w xY ww)Nz&Data permission konflik atau sudah ada)
r-   modulaksir   set_permissionsr"   r   r#   r$   r   )r   r)   r:   r   r,   pperm_tuplesr'   s           r   r>   r>   X   s      "g&&D.9:kAGGQVV$kK:	&66r7KPPiik ':P CkkmABB kkmsr   CA6CA8CB A=B /A?0B 5C8C=B ?B CB +C	C
CCr   )sqlalchemy.excr   r   sqlalchemy.ext.asyncior   app.models.roler   r   r   r	   app.models.userr
   app.repositoriesr   app.schemas.roler   r   r   intlistr   r(   r-   r4   r7   r9   r>        r   <module>rK      s'   : / E E   , C C6 6d
 6d4j 6, j  $ 2| c d "*4=A	.	, 	 	T 	d 	>>">	.> n% 	
 
.rJ   