
    <gEi:0                        d 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 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mZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m)Z)  e       Z*e*jW                  de'e          ee%      dd ee	      fde,de(e   de,de,def
d       Z-e*j]                  d       ee$       ee	      fdededefd       Z/dede,de,fdZ0dede,de,fdZ1e*jW                  d e       ee	      fde,defd!       Z2e*j]                  d"e!       ee$       ee	      fd#ededefd$       Z3e*jW                  d%e'e           ee$       ee	      fd&e,dedefd'       Z4y())z4
Endpoints pour les capsules et quiz - Utilisateurs
    )	APIRouterDependsHTTPExceptionstatus)Session)get_db)User)Chapter)Capsule)Quiz)QuizQuestion)QuizAttempt)UserCapsuleProgressUserChapterProgressUserDiseaseProgress)CapsuleResponseCapsuleWithProgressCapsuleProgressUpdateQuizWithQuestionsQuizAttemptSubmitQuizAttemptResponseQuizAttemptDetailQuizQuestionWithAnswer)get_current_userget_optional_user)ListOptional)datetimez/chapters/{chapter_id}/capsules)response_model   
chapter_idcurrent_userskiplimitdbc                   K   |j                  t              j                  t        j                  | k(        j	                         }|st        t        j                  d      |j                  t              j                  t        j                  | k(  t        j                  dk(        j                  t        j                        j                  |      j                  |      j                         }g }|D ]  }d}	|ri|j                  t               j                  t         j"                  |j                  k(  t         j$                  |j                  k(        j	                         }	t'        j(                  |      }
|	r|	j*                  nd|
_        |	r|	j,                  nd|
_        |	r|	j.                  nd|
_        |j1                  |
        |S w)zG
    Liste des capsules d'un chapitre avec progression (optionnel)
    u   Chapitre non trouvéstatus_codedetailTN)queryr
   filteridfirstr   r   HTTP_404_NOT_FOUNDr   r!   	is_activeorder_byorderoffsetr$   allr   user_id
capsule_idr   from_ormis_completedwatch_time_secondslast_position_secondsappend)r!   r"   r#   r$   r%   chaptercapsulesresultcapsuleprogresscapsule_datas              M/home/www/lebenam.kofcorporation.com/app/api/v1/endpoints/training_content.pyget_capsules_by_chapterrB      st     hhw&&wzzZ'?@FFHG11)
 	

 xx ''j(T! hw}}ffTl55< 
 F $xx 34;;#++|>#..'**< eg 
 +33G<=EH$9$94!IQ(*E*EW['OWX-K-K]a*l#$  Ms   GGz/capsules/progressprogress_datac                 P  K   |j                  t              j                  t        j                  | j                  k(        j                         }|st        t        j                  d      |j                  t              j                  t        j                  |j                  k(  t        j                  | j                  k(        j                         }|s2t        |j                  | j                        }|j                  |       | j                  r d|_        t        j                         |_        | j                   | j                   |_        | j"                  | j"                  |_        |j%                          t'        ||j                  |j(                         dddS w)u7   
    Mettre à jour la progression sur une capsule
    u   Capsule non trouvéer'   )r4   r5   Tu   Progression mise à jour)r   message)r*   r   r+   r,   r5   r-   r   r   r.   r   r4   addr7   r   utcnowcompleted_atr8   r9   commitupdate_chapter_progressr!   )rC   r"   r%   r>   r?   s        rA   update_capsule_progressrK   G   sY     hhw&&wzz]5M5M'MNTTVG11)
 	
 xx+,33##|6&&-*B*BB eg 
 & OO$//
 	x !! $ ( 1''3&3&F&F#**6)6)L)L&IIK B1C1CD - s   F$F&r4   c                    | j                  t              j                  t        j                  |k(  t        j                  dk(        j                         }| j                  t              j                  t              j                  t        j                  |k(  t        j                  dk(  t        j                  |k(  t        j                  dk(        j                         }| j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|st        ||      }| j                  |       |dkD  r||k(  r| j                  t              j                  t        j                  |k(        j                         }|r-|j                  rAd|_	        t        j                          |_        n d|_	        t        j                          |_        | j%                          | j                  t&              j                  t&        j(                  |k(        j                         }|rt+        | ||j,                         yy)u@   
    Met à jour automatiquement la progression du chapitre
    T)r4   r!   r   N)r*   r   r+   r!   r/   countr   joinr4   r7   r   r-   rF   r   quiz_passedr   rG   rH   rI   r
   r,   update_disease_progress
disease_id)r%   r4   r!   total_capsulescompleted_capsuleschapter_progressquizr;   s           rA   rJ   rJ   y   s   
 XXg&--j(T! eg  "56;;GDKKj(T!##w.((D0	
 eg  xx 34;;##w.&&*4 eg 
 .!
 	 0NBxx~$$T__
%BCIIK++04 -080A - -1),4OO,=)IIK hhw&&wzzZ'?@FFHGGW-?-?@     rQ   c                 f   | j                  t              j                  t        j                  |k(  t        j                  dk(        j                         }| j                  t              j                  t              j                  t        j                  |k(  t        j                  dk(  t        j                  |k(  t        j                  dk(        j                         }| j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|st        ||      }| j                  |       |dkD  rF||z  dz  }t        |d      |_        ||k(  r!d|_	        t        j                          |_        nd|_	        | j%                          y)uB   
    Met à jour automatiquement la progression de la maladie
    T)r4   rQ   r   d      FN)r*   r
   r+   rQ   r/   rM   r   rN   r4   r7   r   r-   rF   roundprogress_percentager   rG   rH   rI   )r%   r4   rQ   total_chapterscompleted_chaptersdisease_progressr[   s          rA   rP   rP      sw   
 XXg&--j(T! eg  "56;;GDKKj(T!##w.((D0	
 eg  xx 34;;##w.&&*4 eg 
 .!
 	  1NBcI/45H!/L,/,0),4OO,=),1)IIKrV   z/chapters/{chapter_id}/quizc           	        K   |j                  t              j                  t        j                  | k(  t        j                  dk(        j                         }|st        t        j                  d      |j                  t              j                  t        j                  |j                  k(  t        j                  dk(        j                  t        j                        j                         }t        j                   |      }|D cg c]<  }|j                  |j                  |j"                  |j$                  |j                  d> c}|_        |S c c}w w)u+   
    Récupérer le quiz d'un chapitre
    TzAucun quiz pour ce chapitrer'   )r,   quiz_idquestionoptionsr1   )r*   r   r+   r!   r/   r-   r   r   r.   r   r`   r,   r0   r1   r3   r   r6   ra   rb   	questions)r!   r%   rU   rc   	quiz_dataqs         rA   get_chapter_quizrf      s     88D>  :%$ eg 	
 110
 	
 &--'$& h|!!"335 
 "**40I 	  $$yy

yyWW	
	I 	s   DE
AEEz/quiz/submitattempt_datac                   K   |j                  t              j                  t        j                  | j                  k(        j                         }|st        t        j                  d      |j                  t              j                  t        j                  | j                  k(        j                         }| j                  D ci c]  }|j                  |j                   }}d}t        |      }g }	g }
|D ]  }|j                  |j                        }||j                   k(  }|r|dz  }|	j#                  |j                  ||d       |
j#                  t%        |j                  |j                  |j&                  |j(                  |j*                  |j                   |j,                                |dkD  rt/        ||z  dz        nd}||j0                  k\  }t3        | j                  |j                  |	||t5        j6                               }|j9                  |       |j;                          |j=                  |       |r|j                  t>              j                  t>        j@                  |j                  k(  t>        jB                  |jB                  k(        j                         }|s4t?        |j                  |jB                  d	
      }|j9                  |       nd	|_"        |j;                          tG        ||j                  |jB                         tI        |j                  |j                  |j@                  |jJ                  |jL                  |jN                  |jP                  |	|
	      S c c}w w)u+   
    Soumettre les réponses d'un quiz
    u   Quiz non trouvér'   r      )question_idanswer
is_correct)r,   r`   ra   rb   r1   correct_answerexplanationrX   )r`   r4   answersscorepassedrH   T)r4   r!   rO   )	r,   r`   r4   rp   rq   
started_atrH   ro   correct_answers))r*   r   r+   r,   r`   r-   r   r   r.   r   r3   ro   rj   rk   lengetrm   r:   r   ra   rb   r1   rn   intpassing_scorer   r   rG   rF   rI   refreshr   r4   r!   rO   rJ   r   rp   rq   rr   rH   )rg   r"   r%   rU   rc   ansuser_answerscorrect_counttotal_questionsanswers_detailcorrect_answers_listra   user_answerrl   rp   rq   attemptrT   s                     rA   submit_quizr     s     88D>  L,@,@!@AGGID11%
 	
 &-- 4 44	ce 
 <H;O;OPCCOOSZZ/PLP M)nON "&&x{{3 H$;$;;
QM#;;!$
 	 	##$:{{$$&&$$..#22 ,,%
 	. =La<OC0C78UVEd(((F $$__&G FF7OIIKJJw 88$78??''<??:**doo=
 %' 	
  2$??  
 FF#$+/(
		 	 LOOT__E::mm~~%%)),
 
M Qs   CM?M:&JM?z/quiz/{quiz_id}/attemptsr`   c                 "  K   |j                  t              j                  t        j                  | k(  t        j                  |j
                  k(        j                  t        j                  j                               j                         }|S w)z+
    Historique des tentatives de quiz
    )
r*   r   r+   r`   r4   r,   r0   rH   descr3   )r`   r"   r%   attemptss       rA   get_quiz_attemptsr   i  sl      xx$++w&|. h{'',,./ 
 Os   BBN)5__doc__fastapir   r   r   r   sqlalchemy.ormr   app.db.sessionr   app.models.userr	   app.models.chapterr
   app.models.capsuler   app.models.quizr   app.models.quiz_questionr   app.models.quiz_attemptr   app.models.user_progressr   r   r   app.schemas.trainingr   r   r   r   r   r   r   r   app.core.securityr   r   typingr   r   r   routerru   rv   rB   postrK   rJ   rP   rf   r   r    rV   rA   <module>r      s6   > = " !   & &   1 /   
 B ! 	 -dCV>WX $++<#=&/''4.' ' 	'
 	' Y'R !" !!12&//(// 	/ #/b1A 1A# 1A3 1Af* *# *3 *\ ):KL &/$$$ M$L ^,=> !!12&/e#ee 	e ?eN &t<O7PQ !!12&/ 	 RrV   