Ë
    uç±jr  ã                   óœ  — 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mZmZmZ d dlmZmZ d dlmZ d dlmZ  ed	d
g¬«      Zdedefd„Zdedefd„Zd9dededefd„Zej?                  d ee«      g¬«      dedefd„«       Z ej?                  d ee«      g¬«      dedefd„«       Z!ej?                  d ee«      g¬«      defd„«       Z"ejG                  d«       e e«       «      fd„«       Z$ejK                  d«       e e«       «      fdefd„«       Z&ejG                  d e ed«      «      g¬«       ed d!¬"«       ed#d#¬$«       ed%d#d&¬'«       ed(d)¬"«       ed(d)¬"«       ed*d+¬,«       ed-d.¬,«      fd/ed0e'd1e'd2ee   d3ee   d4ed5efd6„«       Z(ejK                  d7 ee«      g¬«       e e«       «      fdefd8„«       Z)y():é    )ÚOptional)Ú	APIRouterÚDependsÚQueryÚRequest)ÚJSONResponse)ÚAccessTokenModel)ÚUserForgotPasswordPayloadÚUserGoogleLoginPayloadÚUserLoginPayloadÚ	UserModelÚUserUpdatePasswordPayloadÚUserUpdateProfilePayload)Úrequire_userÚrequires_permission)ÚACCESS_TOKEN_TTL_HOURS)Úverify_turnstilez/userzUser API)ÚprefixÚtagsÚrequestÚreturnc                 óJ   — | j                   r| j                   j                  S dS )NÚ )ÚclientÚhost)r   s    úA/var/www/pod-logistic/pod-api-clone/controller/user_controller.pyÚ
_client_ipr      s   € Ø")§.¢.ˆ7�>‰>×ÑÐ8°bÐ8ó    Úuserc                 ó   — t        j                  t        | j                  d«      «      «      }t        | j                  d«      «      | j                  d«      | j                  dd«      | j                  dd«      | j                  dd«      | j                  dd«      | j                  dd«      | j                  d	d
«      | j                  dd
«      dt	        | j                  d«      «      | j                  dd«      |d   dœS )NÚ_idÚemailÚ	firstNamer   ÚlastNameÚphoneÚaddressÚ	avatarUrlÚbalancer   ÚdebtBalancer   ÚpasswordÚ	createdAtÚtierCurrent)Úidr"   r#   r$   r%   r&   r'   r(   r)   ÚroleÚhasPasswordr+   r,   )r   Úsync_user_tierÚstrÚgetÚbool)r   Úsnapshots     r   Ú_user_response_datar5      sÑ   € Ü×'Ñ'¬¨D¯H©H°U«OÓ(<Ó=€Hä�$—(‘(˜5“/Ó"Ø—‘˜'Ó"Ø—X‘X˜k¨2Ó.Ø—H‘H˜Z¨Ó,Ø—‘˜' 2Ó&Ø—8‘8˜I rÓ*Ø—X‘X˜k¨2Ó.Ø—8‘8˜I qÓ)Ø—x‘x ¨qÓ1ØÜ˜DŸH™H ZÓ0Ó1Ø—X‘X˜k¨2Ó.Ø Ñ.ñð r   Úmessagec           
      óØ   — t        j                  t        | d   «      dt        t	        |«      |j
                  j                  dd«      ¬«      }d|d   dt        d	z  t        | «      d
œ|dœS )Nr!   r   z
user-agentr   )Úactor_idÚ
actor_roleÚ	ttl_hoursÚcreated_by_ipÚ
user_agentTÚrawTokenÚBeareri  )ÚaccessTokenÚ	tokenTypeÚ	expiresInr   ©ÚsuccessÚdatar6   )r	   Úissue_tokenr1   r   r   Úheadersr2   r5   )r   r   r6   Úissueds       r   Ú_issue_user_login_responserH   -   st   € Ü×)Ñ)Ü�T˜%‘[Ó!ØÜ(Ü  Ó)Ø—?‘?×&Ñ& |°RÓ8ô€Fð à! *Ñ-Ø!Ü/°$Ñ6Ü'¨Ó-ñ	
ð ñ	ð 	r   z/auth/google)ÚdependenciesÚpayloadc              ƒ   ó˜   K  — 	 t        j                  | «      }t        ||d«      S # t        $ r}dt	        |«      dœcY d }~S d }~ww xY w­w)Nu!   Ä�Äƒng nháº­p Google thÃ nh cÃ´ngF©rC   r6   )r   Úhandle_google_loginrH   Ú	Exceptionr1   )rJ   r   r   Úes       r   Úuser_google_loginrP   B   sI   è ø€ ð5Ü×,Ñ,¨WÓ5ˆÜ)¨$°Ð9\Ó]Ð]øÜò 5Ø ¬S°«VÑ4Õ4ûð5üs.   ‚A
„!& ¥A
¦	A¯A¼A½A
ÁAÁA
z/auth/loginc              ƒ   ó„   K  — t        j                  | j                  | j                  «      }|rt	        ||«      S dddœS ­w)NFu-   Email hoáº·c máº­t kháº©u khÃ´ng chÃ­nh xÃ¡c!rL   )r   Úverify_loginr"   r*   rH   )rJ   r   r   s      r   Ú
user_loginrS   K   s>   è ø€ ä×!Ñ! '§-¡-°×1AÑ1AÓB€DáÜ)¨$°Ó8Ð8àÐ)XÑYÐYùs   ‚>A z/forgot-passwordc              ƒ   óX   K  — t        j                  | j                  «      \  }}||dœS ­w)NrL   )r   Úreset_passwordr"   )rJ   rC   r6   s      r   Úforgot_passwordrV   U   s*   è ø€ ä ×/Ñ/°·±Ó>Ñ€GˆWØ¨7Ñ3Ð3ùs   ‚(*z/mec                 ór   — t        j                  | d   «      }|st        ddddœ¬«      S dt        |«      dœS )	Nr-   é”  Fõ   KhÃ´ng tÃ¬m tháº¥y UserrL   ©Ústatus_codeÚcontentT)rC   rD   )r   Úget_user_by_idr   r5   )Úcurrent_userr   s     r   Úget_user_mer_   [   sJ   € ä×#Ñ# L°Ñ$6Ó7€DÙÜØØ %Ð2KÑLô
ð 	
ð Ü# DÓ)ñð r   c              ƒ   óì   K  — t        j                  |d   | j                  | j                  | j                  | j
                  | j                  ¬«      }|st        ddddœ¬«      S dt        |«      d	d
œS ­w)Nr-   )Úuser_idÚ
first_nameÚ	last_namer%   r&   Ú
avatar_urlrX   FrY   rL   rZ   Tu   Cáº­p nháº­t thÃ nh cÃ´ngrB   )	r   Úupdate_profile_by_idr#   r$   r%   r&   r'   r   r5   )rJ   r^   r   s      r   Úupdate_user_merf   j   s�   è ø€ ô
 ×)Ñ)Ø˜TÑ"Ø×$Ñ$Ø×"Ñ"Ø�m‰mØ—‘Ø×$Ñ$ô€Dñ ÜØØ %Ð2KÑLô
ð 	
ð Ü# DÓ)Ø.ñð ùs   ‚A2A4z/searchÚstaff_managementr   u   Tá»« khÃ³a tÃ¬m kiáº¿m user)Údescriptioné   )Úgeé
   éd   )rj   ÚleNz
YYYY-MM-DDr(   z^(balance|spent|debt)$)ÚpatternÚdescz^(asc|desc)$ÚkeywordÚpageÚpageSizeÚdateFromÚdateToÚsortByÚ	sortOrderc           	      ój   — t        j                  | ||||||¬«      }d|d   |d   |d   |d   |d   dœS )	N)rp   rq   Ú	page_sizeÚ	date_fromÚdate_toÚsort_byÚ
sort_orderTÚitemsÚtotalrq   rr   Ú
totalPages)rC   rD   r~   rq   rr   r   )r   Úsearch_users)rp   rq   rr   rs   rt   ru   rv   Úresults           r   r€   r€   …   s]   € ô ×#Ñ#ØØØØØØØô€Fð Ø�w‘Ø˜‘Ø�v‘Ø˜:Ñ&Ø˜\Ñ*ñð r   z/update-passwordc              ƒ   ó~   K  — t        j                  |d   | j                  xs d| j                  «      \  }}||dœS ­w)Nr-   r   rL   )r   Úupdate_password_by_idÚoldPasswordÚnewPassword)rJ   r^   rC   r6   s       r   Úupdate_passwordr†   £   sI   è ø€ ô
 !×6Ñ6Ø�TÑØ×ÑÒ!˜rØ×ÑóÑ€GˆWð
 ¨7Ñ3Ð3ùs   ‚;=)u   Ä�Äƒng nháº­p thÃ nh cÃ´ng)*Útypingr   Úfastapir   r   r   r   Úfastapi.responsesr   Úmodel.access_token_modelr	   Úmodel.user_modelr
   r   r   r   r   r   Úutils.auth_helperr   r   Úutils.settingsr   Úutils.turnstile_helperr   Úrouterr1   r   Údictr5   rH   ÚpostrP   rS   rV   r2   r_   Úputrf   Úintr€   r†   © r   r   ú<module>r•      s€  ðÝ ç 6Ó 6Ý *å 5÷÷ ÷ @Ý 1Ý 3á	˜'¨¨Ô	5€ð9˜ð 9 Có 9ð˜dð  tó ñ& Tð °Gð Àcó ð* ‡�ˆ^©7Ð3CÓ+DÐ*E€ÓFð5Ð%;ð 5Àgò 5ó Gð5ð ‡�ˆ]©'Ð2BÓ*CÐ)D€ÓEðZÐ.ð Z¸ò Zó FðZð ‡�Ð©wÐ7GÓ/HÐ.I€ÓJð4Ð#<ò 4ó Kð4ð
 ‡�ˆEÓÙ$¡\£^Ó4ò ó ðð ‡�ˆEÓñ ™›Ó(ñØ%òó ðð4 ‡�ˆI¡WÑ-@ÐASÓ-TÓ%UÐ$V€ÓWá˜Ð)FÔGÙ�a˜A”Ù˜"  sÔ+Ù# D°lÔCÙ! $°LÔAÙ˜	Ð+CÔDÙ˜6¨>Ô:ñØðà
ðð ðð �s‰mð	ð
 �S‰Mðð ðð òó Xðð: ‡�Ð©gÐ6FÓ.GÐ-H€ÓIñ ™›Ó(ñ	4Ø&ò	4ó Jñ	4r   