
    =gEi/%                     4   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mZ ddl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$  e       Z%e%jM                  de#e         dd ee      fde'de'defd       Z(e%jM                  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%jM                  de       ee!       ee      fde'de$e   defd       Z*e%jM                  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%jM                  de       ee        ee      fdedefd       Z,e%j[                  d        ee        ee      fde'dedefd!       Z.y")#z.
Endpoints pour les formations - Utilisateurs
    )	APIRouterDependsHTTPExceptionstatus)Session)func)get_db)User)Theme)Disease)Chapter)UserDiseaseProgressUserChapterProgress)ThemeResponseThemeWithStatsDiseaseResponseDiseaseWithProgressChapterResponseChapterWithProgressProgressStats)get_current_userget_optional_user)ListOptionalz/themes)response_model   skiplimitdbc                 N  K   |j                  t              j                  t        j                  dk(        j	                  t        j
                        j                  |       j                  |      j                         }g }|D ]  }|j                  t              j                  t        j                  |j                  k(  t        j                  dk(        j                         }|j                  t              j                  t              j                  t        j                  |j                  k(  t        j                  dk(  t        j                  dk(        j                         }t        j                   |      }||_        ||_        |j'                  |        |S w)u2   
    Liste des thématiques avec statistiques
    T)queryr   filter	is_activeorder_byorderoffsetr   allr   theme_ididcountr   joinr   from_ormdiseases_counttotal_chaptersappend)	r   r   r   themesresultthemer-   r.   
theme_datas	            E/home/www/lebenam.kofcorporation.com/app/api/v1/endpoints/training.py
get_themesr5      sG     XXe_##EOOt$;<EEekkRYYZ^_eefklpprFF "'*11(%
 %' 	
 '*//8??(%%
 %'	 	 $,,U3
$2
!$2
!j!"" Ms   F#F%z/themes/{theme_id}/diseasesr(   current_userc                 J  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	                         }	|j                  t&              j                  t&        j$                  |j                  k(  t&        j                  dk(        j)                         }
t+        j,                  |      }|	r|	j.                  nd|_        |	r|	j0                  nd|_        |
|_        |j5                  |       ) |S w)u\   
    Liste des maladies d'une thématique avec progression de l'utilisateur (optionnel)
    u   Thématique non trouvéestatus_codedetailTN)r!   r   r"   r)   firstr   r   HTTP_404_NOT_FOUNDr   r(   r#   r$   r%   r&   r   r'   r   user_id
disease_idr   r*   r   r,   progress_percentageis_completedchapters_countr/   )r(   r6   r   r   r   r2   diseasesr1   diseaseprogressrA   disease_datas               r4   get_diseases_by_themerF   7   s     HHUO""588x#78>>@E11-
 	

 xx ''H$T! hw}}ffTl55< 
 F $xx 34;;#++|>#..'**< eg  '*11'**,%
 %' 	
 +33G<KS8+G+GY](=EH$9$94!&4#l#)$, Ms   H!H#z/diseases/{disease_id}r>   c                   K   |j                  t              j                  t        j                  | k(        j	                         }|st        t        j                  d      d}|r_|j                  t              j                  t        j                  |j                  k(  t        j                  | k(        j	                         }|j                  t              j                  t        j                  | k(  t        j                  dk(        j                         }t        j                  |      }|r|j                   nd|_        |r|j"                  nd|_        ||_        |S w)u=   
    Détails d'une maladie avec progression (optionnel)
       Maladie non trouvéer8   NT)r!   r   r"   r)   r;   r   r   r<   r   r=   r>   r   r#   r*   r   r,   r?   r@   rA   )r>   r6   r   rC   rD   rA   rE   s          r4   get_disease_detailsrI   g   s'     hhw&&wzzZ'?@FFHG11)
 	

 H88/077''<??:**j8
 %' 	
 XXg&--j(T! eg 
 '//8LGOx'C'CUYL$9A 5 5tL"0Ls   E!E#z/diseases/{disease_id}/chaptersc                   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 ]t  }d}	|ri|j                  t               j                  t         j"                  |j                  k(  t         j$                  |j                  k(        j	                         }	ddlm}
 |j                  |
      j                  |
j$                  |j                  k(  |
j                  dk(        j+                         }ddlm} |j                  |      j                  |j$                  |j                  k(        j	                         du}t1        j2                  |      }|	r|	j4                  nd|_        |	r|	j6                  nd|_        ||_        ||_        |j=                  |       w |S w)zH
    Liste des chapitres d'une maladie avec progression (optionnel)
    rH   r8   TNr   )Capsule)Quiz)r!   r   r"   r)   r;   r   r   r<   r   r>   r#   r$   r%   r&   r   r'   r   r=   
chapter_idapp.models.capsulerK   r*   app.models.quizrL   r   r,   r@   quiz_passedcapsules_counthas_quizr/   )r>   r6   r   r   r   rC   chaptersr1   chapterrD   rK   rQ   rL   rR   chapter_datas                  r4   get_chapters_by_diseaserV      s     hhw&&wzzZ'?@FFHG11)
 	

 xx ''j(T! hw}}ffTl55< 
 F $xx 34;;#++|>#..'**< eg  	/'*11'**,%
 %' 	 	)88D>((GJJ)FGMMOW[[*33G<=EH$9$94!;C8#7#7 &4# (l#5$8 Ms   I/I1z/progress/statsc                   K   |j                  t              j                  t        j                  dk(        j	                         }|j                  t
              j                  t
        j                  dk(        j	                         }|j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j	                         }|j                  t              j                  t        j                  dk(        j	                         }|j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j	                         }ddlm} |j                  |      j                  |j                  | j                  k(  |j                  dk(        j	                         }|j                  |      j                  |j                  | j                  k(  |j                  dk(        j	                         }	|dkD  r||z  dz  nd}
t        |||||t!        |
d      ||	      S w)z>
    Statistiques de progression globale de l'utilisateur
    Tr   )QuizAttemptFd      )total_themescompleted_diseasestotal_diseasescompleted_chaptersr.   overall_progress_percentagequizzes_passedquizzes_failed)r!   r   r"   r#   r*   r   r   r=   r)   r@   r   r   app.models.quiz_attemptrX   passedr   round)r6   r   r[   r]   r\   r.   r^   rX   r`   ra   overall_progresss              r4   get_user_progress_statsrf      s     88E?))%//T*ABHHJL XXg&--g.?.?4.GHNNPN "56==##|6((D0 eg  XXg&--g.?.?4.GHNNPN "56==##|6((D0 eg  4XXk*11|.d" eg 
 XXk*11|.e# eg  GUWXFX*^;cA^_!-%-%$)*:A$>%%	 	s   I I"z/diseases/{disease_id}/startc                 
  K   |j                  t              j                  t        j                  | k(        j	                         }|st        t        j                  d      |j                  t              j                  t        j                  |j                  k(  t        j                  | k(        j	                         }|s9t        |j                  | d      }|j                  |       |j                          dd| dS w)u0   
    Démarrer la formation sur une maladie
    rH   r8   g        )r=   r>   r?   Tu   Formation démarrée)r   messager>   )r!   r   r"   r)   r;   r   r   r<   r   r=   r>   addcommit)r>   r6   r   rC   rD   s        r4   start_disease_trainingrk      s      hhw&&wzzZ'?@FFHG11)
 	
 xx+,33##|6&&*4 eg 
 & OO! #

 	x
		 )  s   DDN)/__doc__fastapir   r   r   r   sqlalchemy.ormr   
sqlalchemyr   app.db.sessionr	   app.models.userr
   app.models.themer   app.models.diseaser   app.models.chapterr   app.models.user_progressr   r   app.schemas.trainingr   r   r   r   r   r   r   app.core.securityr   r   typingr   r   routergetintr5   rF   rI   rV   rf   postrk        r4   <module>r      s^   > = "  !   " & & M   B !	Id>&:;&/
 	 << )$?R:ST $++<#=&/--4.- - 	-
 	- U-^ $5HI $++<#=&/!!4.! 	! J!F -dCV>WX $++<#=&/334.3 3 	3
 	3 Y3j m< !12&/444 =4l +, !!12&/""" 	" -"r~   