
    ha                        S SK r S SKrS SKJrJr  S SKJrJrJrJ	r	J
r
Jr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJrJrJ r J!r!  S SK"J#r#J$r$J%r%J&r&J'r'J(r(  S SK)J*r*  S SKJ+r+J,r,  S SK-J.r.J/r/  \" 5       r0\" 5         \Rb                  " SS5      r2\0Rg                  S\\(   S9\" \5      \" SSS9\" SSS9\" SSS94S\4S\\5   S\\5   S\\5   4S jj5       r6\0Ro                  S\(S9\" \5      4S\'S\44S jj5       r8\0Rg                  S5      \" \5      4S \9S\44S! jj5       r:\0Rw                  S\(S9\" \5      4S \9S"\$S\44S# jj5       r<\0R{                  S5      \" \5      4S \9S\44S$ jj5       r>g)%    N)OptionalList)	APIRouterDependsHTTPExceptionFile
UploadFileQuery)Pagepaginate)"disable_installed_extensions_check)descfunc)
joinedload)check_user_is_admin)	UserState)RoleType)UserCourseProgramModuleRegistration)UserBase
UserUpdateUserPasswordUpdateAdminUpdateUser
UserCreateUserResponse)send_otp_email)check_token_validitypwd_context)get_random_intgenerate_otpFILE_STORAGE_PATHfiles/)response_modelzRecherche par nom ou email)descriptionu   Filtrer par rôleu   Filtrer par étatdependenciessearchrolestatec                    U u  pEUR                  [        5      nU(       az  UR                  [        R                  R	                  SU S35      [        R
                  R	                  SU S35      -  [        R                  R	                  SU S35      -  5      nU(       a"  UR                  [        R                  U:H  5      nU(       a"  UR                  [        R                  U:H  5      nUR                  5       $ )N%)
queryr   filter	firstnameilikelastnameemailr+   r,   all)r)   r*   r+   r,   dbuserr/   s          :D:\kofCorporation\kof-academy-backend\app\routers\users.py
list_usersr9      s     HBHHTNE^^!!AfXQ-0]]  1VHA/1ZZ&m,.

 TYY$./TZZ50199;    r7   c                     Uu  p [        S0 U R                  5       D6nUR                  U5        UR                  5         UR	                  U5        U$ )N )r   dictaddcommitrefresh)r7   r)   r6   new_users       r8   create_userrB   3   sB    HB"diik"HFF8IIKJJxOr:   z
/{user_id}user_idc                    Uu  p#UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d  [        SS5      eUR                  [        5      R                  [        R                  UR                  :H  5      R                  5       nU Vs/ s HO  nUR                  UR                  (       a  UR                  R                  OS UR                  UR                  S.PMQ     nnX6S.$ s  snf )N  Utilisateur introuvable)
program_idprogram_titletracking_statexp)r7   progression)r/   r   r0   idfirstr   r   rC   r5   rG   programtitlerI   tracking_xp_count)rC   r)   r6   r7   registrationsrrK   s          r8   get_user_detailsrS   >   s    HB88D>  G!34::<DC!:;; 		$$/	0	   A ,,01		QYY__t..%%		
    55s   ,ADdatac                 `   Uu  p4UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d  [        SS5      eUR                  SS9R                  5        H  u  pV[        XEU5        M     UR                  5         UR                  U5        U$ )NrE   rF   T)exclude_unset)r/   r   r0   rL   rM   r   r=   itemssetattrr?   r@   )rC   rT   r)   r6   r7   fieldvalues          r8   update_userr[   Y   s    HB88D>  G!34::<DC!:;;			5;;=U# > IIKJJtKr:   c                     Uu  p#UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d  [        SS5      eSUl        UR                  5         SS0$ )NrE   rF   DELETEDmessageu   Utilisateur désactivé)r/   r   r0   rL   rM   r   r,   r?   )rC   r)   r6   r7   s       r8   delete_userr_   i   s`    HB88D>  G!34::<DC!:;;DJIIK011r:   )?datetimeostypingr   r   fastapir   r   r   r   r	   r
   fastapi_paginationr   r   fastapi_pagination.utilsr   
sqlalchemyr   r   sqlalchemy.ormr   app.utils.authentificationr   app.enums.user_stater   app.enums.role_typer   app.models.baser   r   r   r   r   app.schemas.userr   r   r   r   r   r   app.services.emailr   r    r!   app.utils.helpersr"   r#   routergetenvr$   gettuplestrr9   postrB   intrS   putr[   deleter_   r<   r:   r8   <module>rx      s    	 ! N N - G ! % : * ( G G p p - H :	 " $II17;  C\ 23!"56!$4PQ2EF 3FG	SM 3- C=	 40 S.8?@S8T j   / L9@AT9U 6c 6 6 64 L6FMNaFb  J e  7 |4;<O4P 2 2E 2 2r:   