
    YhY                        S SK r S SKrS SKrS SK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   S SK!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       r/\" 5         \R`                  " SS5      r1\/Re                  S5      \" \*5      4S\34S jj5       r4\/Rk                  S5      \" \*5      4S\6S\$S\34S jj5       r7\/Rq                  S5      \" \*5      4S\34S jj5       r9\/Rq                  S5      \" \*5      4S\:S\34S jj5       r;\/Ry                  S5      \" \*5      4S\%S\34S  jj5       r=\/Rq                  S!5      \" \*5      4S\34S" jj5       r>\/Rq                  S#5      \" \*5      4S$\:S\34S% jj5       r?\/Rq                  S&5      \" \*5      4S\34S' jj5       r@\/R                  S(5      \" \*5      4S)\:S\34S* jj5       rBg)+    N)	APIRouterDependsHTTPExceptionFile
UploadFile)Pagepaginate)"disable_installed_extensions_check)descfunc)
joinedload)GeneralState)	UserState)RegistrationState)UserProgramQuizModuleQuestion)Registration)UserBase
UserUpdateUserPasswordUpdateRegistrationRequestQuizAnswers)send_otp_email)check_token_validitypwd_context)get_random_intgenerate_otpFILE_STORAGE_PATHfilesz/delete-accountdependenciesc                 h   U u  pUR                  [        5      R                  [        R                  UR                  :H  5      R	                  5       nUc
  [        SSS9eSUl        UR                  S-   Ul        UR                  S-   Ul        UR                  5         UR                  U5        SSS.$ )	N  User not foundstatus_codedetailDeleted_oldTu   Compte supprimé avec succès!statusmessage)queryr   filteridfirstr   stateemailphonecommitrefresh)r#   dbuserdb_users       =D:\kofCorporation\kof-academy-backend\app\routers\students.pydelete_accountr<   8   s    HBhhtn##DGGtww$67==?G4DEEGMMMF*GMMMF*GMIIKJJw 3     z/update-password/{user_id}user_iduser_update_passwordc                 @  #    Uu  p4 UR                  [        5      R                  [        R                  U :H  [        R                  [
        R                  :H  5      R                  5       nUc
  [        SSS9e[        R                  " UR                  UR                  5      (       d  SSS.$ [        R                  " UR                  5      nXel        UR                  5         UR!                  U5        SSS.$ ! ["         a  nS[%        U5      S.s S nA$ S nAff = f7f)	Nr%   r&   r'   FzMot de passe incorrect!r,   Tu&   Mot de passe mis à jour avec succès!)r/   r   r0   r1   r3   r   ACTIVEr2   r   r   verifyold_passwordpasswordhashnew_passwordr6   r7   	Exceptionstr)r>   r?   r#   r8   r9   r:   hashed_passwordes           r;   update_passwordrK   L   s      HB
((4.''7(:DJJ)JZJZ<Z[aac?C8HII!!"6"C"CT]]SS4 
 &**+?+L+LM*
		


7 ?
 	

  
1v
 	

sB   DB$C9 ,D-AC9 8D9
DDDDDDz	/programsc                     U u  pUR                  [        5      R                  [        R                  [        R
                  :H  5      R                  5       nSUS.$ )NzListe des programmes)r.   programs)r/   r   r0   r3   r   rA   all)r#   r8   r9   rM   s       r;   list_programsrO   p   sE    HBxx ''9L9L(LMQQSH-8DDr=   z/programs/{program_id}
program_idc                    Uu  p#UR                  [        5      R                  [        R                  U :H  [        R                  [
        R                  :H  5      R                  5       nU(       d
  [        SSS9eSU  3US.$ )Nr%      Programme non trouvér'   u   Détails du programme )r.   program)	r/   r   r0   r1   r3   r   rA   r2   r   )rP   r#   r8   r9   rS   s        r;   get_programrT   z   sx    HBhhw&&

j ,,, eg 
 4KLL ,J<8 r=   z/registrationsregistrationc                    Uu  p#UR                  [        5      R                  [        R                  U R                  :H  [        R
                  [        R                  :H  5      R                  5       nU(       d
  [        SSS9eUR                  [        5      R                  [        R                  U R                  :H  [        R                  UR                  :H  5      R                  5       nU(       a
  [        SSS9e[        U R                  SUR                  [        R                  S9nUR                  U5        UR                  5         UR!                  U5        SUR                  S	.$ )
Nr%   rR   r'   i  u)   Vous êtes déjà inscrit à ce programmer   )rP   tracking_xp_countr>   r3   u!   Inscription au programme réussie)r.   registration_id)r/   r   r0   r1   rP   r3   r   rA   r2   r   r   r>   r   PAIDaddr6   r7   )rU   r#   r8   r9   rS   existing_registrationnew_registrations          r;   register_to_programr]      s)   
 HB hhw&&

l---,,, eg 
 4KLL HH\299<#:#::' eg 
 4_`` $**$$	 FFIIKJJ :O_ObObccr=   z/registrations/mec           	         U u  pUR                  [        5      R                  [        R                  UR                  :H  [        R
                  [        R                  :H  5      R                  5       n/ nU HL  nUR                  UR                  UR                  UR
                  UR                  UR                  S.5        MN     SUS.$ )N)r1   rP   r3   
created_at
updated_atzMes inscriptions)r.   registrations)r/   r   r0   r>   r1   r3   r   rY   rN   appendrP   r_   r`   )r#   r8   r9   ra   resultregs         r;   my_registrationsre      s    HBHH\*11'/444 
ce  F&&..YY....
 	  & r=   z/quizzes/{quiz_id}quiz_idc                     Uu  p#UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d
  [        SSS9eU$ )Nr%   u   Quiz non trouvér'   )r/   r   r0   r1   r2   r   )rf   r#   r8   r9   quizs        r;   get_quizri      sK     HB88D>  G!34::<D4FGGKr=   z/notifications/mec                 
    SS0$ )Nr.   zMes notifications )r#   s    r;   my_notificationsrl      s    *++r=   z/notifications/{notif_id}/readnotif_idc                     SSU  S30$ )Nr.   zNotification u    marquée comme luerk   )rm   r#   s     r;   mark_notification_as_readro      s    xj0CDEEr=   )Cdatetimeosrandomfastapir   r   r   r   r   fastapi_paginationr   r	   fastapi_pagination.utilsr
   
sqlalchemyr   r   sqlalchemy.ormr   app.enums.general_stater   app.enums.user_stater   app.enums.registration_stater   app.models.baser   r   r   r   r   app.models.registrationr   app.schemas.userr   r   r   r   r   app.services.emailr   app.utils.authentificationr   r   app.utils.helpersr   r    routergetenvr!   deletetupler<   putrH   rK   getrO   intrT   postr]   re   ri   rl   patchro   rk   r=   r;   <module>r      s@    	  G G - G ! % 0 * : B A 0 g g - H :	 " $II17; <  !)01E)F   "& ()078L0M
3 
>P 
(-
 *
F K(/0D(E E E E $%7>?S7T C u  &(  ""67$d%$d$d $dL  +23G+H 5  !8  ! $++?#@c   "  +23G+H ,5 , !, ./CJK_C` F F5 F 0Fr=   