Ë
    t·j  ã                   óœ  — d dl mZmZmZ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 d dlmZmZmZ d dlmZ d d	lmZ  e«       Zd
Zdedefd„Z G d„ de	«      Zej;                  dej<                   ee«      g¬«       e ee«      «      fdefd„«       ZejA                  d e ee«      «      g¬«      d„ «       Z! G d„ de	«      Z"ej;                  d ee«      g¬«      de"defd„«       Z# G d„ de	«      Z$ejK                  d ee«      g¬«       ee«      fde$fd„«       Z& G d„ d e	«      Z' G d!„ d"e	«      Z(ej;                  d# ee«      g¬«      de(fd$„«       Z) G d%„ d&e	«      Z*ejK                  d' ee«      g¬«       e ee«      «      fde'fd(„«       Z+ej;                  d) ee«      g¬«       e ee«      «      fde*fd*„«       Z,y+),é    )Ú	APIRouterÚDependsÚHTTPExceptionÚRequestÚstatus)ÚJSONResponse)Ú	BaseModel)ÚList)ÚAccessTokenModel)Ú
StaffModel)Úassert_actor_matchÚget_current_actor_requiredÚrequires_permission)ÚACCESS_TOKEN_TTL_HOURS)Úverify_turnstileÚstaff_managementÚrequestÚreturnc                 óJ   — | j                   r| j                   j                  S dS )NÚ )ÚclientÚhost)r   s    úB/var/www/pod-logistic/pod-api-clone/controller/staff_controller.pyÚ
_client_ipr      s   € Ø")§.¢.ˆ7�>‰>×ÑÐ8°bÐ8ó    c                   ó@   — e Zd ZU eed<   eed<   g Zee   ed<   eed<   y)ÚAddStaffRequestÚnameÚemailÚpermissionsÚactorIdN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r    r
   © r   r   r   r      s   … Ø
ƒIØƒJØ€K��c‘ÓØ„Lr   r   z
/add-staff)Ústatus_codeÚdependenciesÚreqc              ƒ   óÐ  K  — | j                   r| j                  st        dd¬«      ‚	 |d   }|j                  dd«      }t	        || j
                  «       t        j                  | j                   j                  «       | j                  j                  «       | j                  ¬«      }d|||d	œd
œS # t        $ r)}t        d|› �«       t        dt        |«      ¬«      ‚d }~ww xY w­w)Né�  u   TÃªn vÃ  Email lÃ  báº¯t buá»™c©r(   ÚdetailÚidr   r   )r   r   r    T©r/   r   )ÚsuccessÚdataÚactedByu   Lá»—i khi táº¡o staff: éô  )r   r   r   Úgetr   r!   r   Úcreate_staffÚstripr    Ú	ExceptionÚprintr%   )r*   Úcurrent_userÚactor_idÚ
actor_nameÚnew_staff_dataÚes         r   Úadd_staff_controllerr?      sÔ   è ø€ ð
 �8Š8˜3Ÿ9š9Ü¨Ð4UÔVÐVð<Ø Ñ%ˆØ!×%Ñ% f¨bÓ1ˆ
Ü˜<¨¯©Ô5ä#×0Ñ0Ø—‘—‘Ó!Ø—)‘)—/‘/Ó#ØŸ™ô
ˆð Ø"àØ"ññ
ð 	
øô ò <ÜÐ'¨ sÐ+Ô,Ü¨´C¸³FÔ;Ð;ûð<üs)   ‚&C&©BB1 Â0C&Â1	C#Â:$CÃC#Ã#C&)r)   c               ƒ   óö   K  — 	 ddl m}  t        | j                  ddi«      «      }|D ]%  }t	        |d   «      |d<   |j                  dd «       Œ' d|dœS # t        $ r}d	t	        |«      d
œcY d }~S d }~ww xY w­w)Nr   ©Ú
collectionÚroleÚstaffÚ_idÚpasswordT©r1   r2   F©r1   Úmessage)Úmodel.staff_modelrB   ÚlistÚfindr%   Úpopr8   )rB   ÚstaffsÚsr>   s       r   Úget_staff_listrP   =   s   è ø€ ð5Ý0ä�j—o‘o v¨wÐ&7Ó8Ó9ˆàò 	$ˆAÜ˜1˜U™8“}ˆAˆe‰Hà�E‰E�*˜dÕ#ð	$ð
  ¨Ñ0Ð0øÜò 5Ø ¬S°«VÑ4Õ4ûð5üs5   ‚A9„AA ÁA9Á	A6ÁA1Á+A6Á,A9Á1A6Á6A9c                   ó"   — e Zd ZU eed<   eed<   y)ÚStaffLoginPayloadr   rF   N©r"   r#   r$   r%   r&   r'   r   r   rR   rR   N   s   … ØƒJØ„Mr   rR   z/auth/loginÚpayloadc              ƒ   óÊ  K  — ddl m} ddlm}m}m} |j                  | j                  ddœ«      }|�r* || j                  |j                  dd«      «      �r|j                  d«      d	k(  rd
ddœS  ||j                  dd«      «      s+|j                  d|d   idd || j                  «      ii«       t        j                  t        |d   «      dt        t        |«      |j                   j                  dd«      ¬«      }d|d   dt        dz  t        |d   «      |d   |j                  dd«      |d   |j                  dg «      |j                  dd«      dœdœdœS d
ddœS ­w)Nr   rA   )Úhash_passwordÚis_password_hashÚverify_passwordrD   )r   rC   rF   r   r   ÚinactiveFu)   TÃ i khoáº£n cá»§a báº¡n Ä‘Ã£ bá»‹ khÃ³a!rH   rE   z$setz
user-agent)r;   Ú
actor_roleÚ	ttl_hoursÚcreated_by_ipÚ
user_agentTÚrawTokenÚBeareri  r   r   rC   r    Úactive)r/   r   r   rC   r    r   )ÚaccessTokenÚ	tokenTypeÚ	expiresInÚuserrG   u3   Email hoáº·c máº­t kháº©u Staff khÃ´ng chÃ­nh xÃ¡c!)rJ   rB   Úutils.password_helperrV   rW   rX   Úfind_oner   rF   r5   Ú
update_oner   Úissue_tokenr%   r   r   Úheaders)rT   r   rB   rV   rW   rX   rd   Úissueds           r   Ústaff_loginrk   S   sg  è ø€ å,ßVÑVà×Ñ¨¯©ÀÑHÓI€Dâ‘ × 0Ñ 0°$·(±(¸:ÀrÓ2JÕKØ�8‰8�HÓ Ò+Ø$Ð1\Ñ]Ð]ñ   §¡¨°RÓ 8Ô9Ø×!Ñ!Ø˜˜U™Ð$Ø˜*¡m°G×4DÑ4DÓ&EÐFÐGôô
 "×-Ñ-Ü˜˜e™Ó%ØÜ,Ü$ WÓ-Ø—‘×*Ñ*¨<¸Ó<ô
ˆð à% jÑ1Ø%Ü3°dÑ:ä˜d 5™kÓ*Ø! '™]Ø ŸH™H V¨RÓ0Ø  ™LØ#'§8¡8¨M¸2Ó#>Ø"Ÿh™h x°Ó:ññ	ñ
ð 	
ð" Ð)^Ñ_Ð_ùs   ‚E!E#c                   ó"   — e Zd ZU eed<   eed<   y)ÚChangePasswordPayloadÚoldPasswordÚnewPasswordNrS   r'   r   r   rm   rm   �   s   … ØÓØÔr   rm   z/change-passwordc              ƒ   óº   K  — |j                  d«      dk7  rt        dd¬«      ‚t        j                  |d   | j                  | j
                  ¬«      \  }}||dœS ­w)	NrC   rD   i“  zStaff account requiredr-   r/   )Ústaff_idÚold_passwordÚnew_passwordrH   )r5   r   r   Úchange_passwordrn   ro   )rT   r:   r1   rI   s       r   Úchange_staff_passwordru   †   se   è ø€ ð
 ×Ñ˜Ó 7Ò*Ü¨Ð4LÔMÐMä!×1Ñ1Ø˜dÑ#Ø×(Ñ(Ø×(Ñ(ôÑ€GˆWð ¨7Ñ3Ð3ùó   ‚AAc                   óF   — e Zd ZU eed<   eed<   eed<   ee   ed<   eed<   y)ÚUpdateStaffPayloadÚstaffIdr   r   r    r!   N)r"   r#   r$   r%   r&   r
   r'   r   r   rx   rx   —   s    … ØƒLØƒJØƒKØ�c‘ÓØ„Lr   rx   c                   ó   — e Zd ZU eed<   y)ÚForgotPasswordPayloadr   NrS   r'   r   r   r{   r{   Ÿ   s   … Ø„Jr   r{   z/forgot-passwordc              ƒ   ó  K  — 	 t        j                  | j                  j                  «       j	                  «       «       dddœS # t
        $ r#}t        ddt        |«      dœ¬«      cY d }~S d }~wt        $ r t        ddddœ¬«      cY S w xY w­w)	NTu>   Máº­t kháº©u má»›i Ä‘Ã£ Ä‘Æ°á»£c gá»­i vá»� email cá»§a báº¡n.rH   r,   F)r(   Úcontentr4   u$   Lá»—i server, vui lÃ²ng thá»­ láº¡i.)	r   Úforgot_password_by_emailr   r7   ÚlowerÚ
ValueErrorr   r%   r8   )rT   r>   s     r   Úforgot_passwordr�   £   s‚   è ø€ ð|Ü×+Ñ+¨G¯M©M×,?Ñ,?Ó,A×,GÑ,GÓ,IÔJØÐ,lÑmÐmøÜò \Ü¨ÀÔSVÐWXÓSYÑ5ZÔ[Õ[ûÜò |Ü¨ÀÐSyÑ5zÔ{Ò{ð|üs@   ‚B„?A ÁBÁ	B
ÁA+Á%B
Á&BÁ+B
ÂBÂ	B
Â
Bc                   ó"   — e Zd ZU eed<   eed<   y)ÚResetPasswordPayloadry   r!   NrS   r'   r   r   rƒ   rƒ   ®   s   … ØƒLØ„Lr   rƒ   z/update-staffc              ƒ   ó>  K  — |d   }|j                  dd«      }t        || j                  «       t        j                  | j
                  | j                  | j                  | j                  «      \  }}|rt        j                  | j
                  «       ||||dœdœS ­w©Nr/   r   r   r0   )r1   rI   r3   )r5   r   r!   r   Úupdate_staffry   r   r   r    r   Úrevoke_all_for_actor©rT   r:   r;   r<   r1   Úmsgs         r   Úupdate_staff_endpointrŠ   ³   s˜   è ø€ ð
 ˜DÑ!€HØ×!Ñ! &¨"Ó-€JÜ�| W§_¡_Ô5ä×*Ñ*Ø�‰Ø�‰Ø�‰Ø×Ñó	�L€GˆSñ ä×-Ñ-¨g¯o©oÔ>ð ØàØñ
ñð ùs   ‚BBz/reset-passwordc              ƒ   óº   K  — |d   }|j                  dd«      }t        || j                  «       t        j                  | j
                  «      \  }}||||dœdœS ­wr…   )r5   r   r!   r   Úadmin_reset_passwordry   rˆ   s         r   Úreset_password_endpointr�   Ñ   sg   è ø€ ð
 ˜DÑ!€HØ×!Ñ! &¨"Ó-€JÜ�| W§_¡_Ô5ä×2Ñ2°7·?±?ÓC�L€GˆSð ØàØñ
ñð ùrv   N)-Úfastapir   r   r   r   r   Úfastapi.responsesr   Úpydanticr	   Útypingr
   Úmodel.access_token_modelr   rJ   r   Úutils.auth_helperr   r   r   Úutils.settingsr   Úutils.turnstile_helperr   ÚrouterÚSTAFF_MANAGEMENT_PERMISSIONr%   r   r   ÚpostÚHTTP_201_CREATEDr?   r5   rP   rR   rk   rm   Úputru   rx   r{   r�   rƒ   rŠ   r�   r'   r   r   ú<module>r›      sJ  ðß FÕ FÝ *Ý Ý å 5Ý (ß aÑ aÝ 1Ý 3á	‹€à0Ð ð9˜ð 9 Có 9ô�iô ð ‡�ˆ\ v×'>Ñ'>ÉgÐVfÓNgÐMh€Óiñ Ñ,Ð-HÓIÓJñ<Ø	ò<ó jð<ð@ ‡�ˆL©Ñ0CÐD_Ó0`Ó(aÐ'b€Ócñ5ó dð5ô ˜	ô ð
 ‡�ˆ]©'Ð2BÓ*CÐ)D€ÓEð*`Ð0ð *`¸7ò *`ó Fð*`ôZ˜Iô ð
 ‡�Ð©gÐ6FÓ.GÐ-H€ÓIñ Ð3Ó4ñ4Ø"ò4ó Jð4ô ˜ô ô˜Iô ð ‡�Ð©wÐ7GÓ/HÐ.I€ÓJð|Ð#8ò |ó Kð|ô˜9ô ð
 ‡�ˆO©7Ð3CÓ+DÐ*E€ÓFñ Ñ,Ð-HÓIÓJñØòó Gðð: ‡�Ð©gÐ6FÓ.GÐ-H€ÓIñ Ñ,Ð-HÓIÓJñØ!òó Jñr   