
    pi6                     0   S SK JrJr  S SKJrJr  S SK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	\	\\
4   4S
 jrS\S	\	\\
4   4S jrS:S\S\\   S	\\   4S jjrS\S\S	\\   4S jr   S;S\S\S\S\\   S\\   S\S\S	\4S jjrS\S\S	\4S jrS\S\S	\4S jrS\S\S	\\   4S jr  S<S\S\S\S\\   S\S	\4S jjrS\S\S	\4S jr S\S\S	\4S jr!S:S\S\S\\   S	\\   4S  jjr"S\S\S	\\   4S! jr#S\S"\S	\\   4S# jr$    S=S\S\S\S$\S\\   S\\   S%\\   S&\\   S\S\S'\\   S(\\   S	\4S) jjr%S\S"\S	\4S* jr&S\S"\S	\4S+ jr'S\S,\S	\\   4S- jr(S\S\S	\\   4S. jr)S\S,\S\S	\4S/ jr*S\S,\S\S	\4S0 jr+S\S,\S\S	\4S1 jr,S\S,\S\S	\\   4S2 jr-S:S\S,\S\\   S	\\   4S3 jjr.S\S,\S"\S	\\   4S4 jr/S\S,\S"\S	\4S5 jr0S\S,\S"\S6\S	\4
S7 jr1S\S,\S"\S	\4S8 jr2S\S,\S\S	\	\\
4   4S9 jr3g)>    )Session
joinedload)descasc)ListOptionalDictAny)datetime   )CourseSectionLesson
EnrollmentProgress)Usercoursereturnc                     U (       d  gU R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  SS.
$ )zBConvert Course ORM object to dictionary for template compatibilityN)
idtitledescription	thumbnailstatus
created_by
created_at
updated_atorder_indexcreated_by_name)	r   r   r   r   r   r   r   r   r   )r   s    >/home/mario/Escritorio/thel4footbal/app/models/academy_crud.pycourse_to_dictr!      sb     ii))%%--''''''))     lessonc                 L   U (       d  gU R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S.$ )z'Convert Lesson ORM object to dictionaryNr   	course_id
section_idr   r   content_typecontent_dataduration_minutesr   r   r   r   attachment_urlattachment_namer%   )r#   s    r    lesson_to_dictr-      s     ii%%''))++++"33))--'''' //!11 r"   Ndbr   c                    U R                  [        5      R                  [        [        R                  [        R
                  :H  5      nU(       a"  UR                  [        R                  U:H  5      nUR                  [        R                  R                  5       [        R                  R                  5       5      R                  5       $ )z.Get all courses, optionally filtered by status)queryr   	outerjoinr   r   r   filterr   order_byr   r   r   r   all)r.   r   r0   s      r    get_all_coursesr5   7   s~    HHV&&tV->->$''-IJEV]]f45>>&,,002F4E4E4J4J4LMQQSSr"   r&   c                     U R                  [        5      R                  [        R                  U:H  5      R	                  5       $ )zGet a single course by ID)r0   r   r2   r   firstr.   r&   s     r    get_course_by_idr9   A   .    88F""699	#9:@@BBr"   r   r   r   r   r   c           	          [        UUUUUUS9nU R                  U5        U R                  5         U R                  U5        UR                  $ )zCreate a new course)r   r   r   r   r   r   )r   addcommitrefreshr   )r.   r   r   r   r   r   r   r   s           r    create_courser?   F   sL     F FF6NIIKJJv99r"   c                 ~   / SQnUR                  5        VVs0 s H  u  pEXC;   d  M  Uc  M  XE_M     nnnU(       d  g[        R                  " 5       R                  S5      US'   U R	                  [
        5      R                  [
        R                  U:H  5      R                  U5        U R                  5         gs  snnf )zUpdate a course)r   r   r   r   r   F%Y-%m-%dT%H:%M:%Sr   T)
itemsr   nowstrftimer0   r   r2   r   updater=   )r.   r&   kwargsallowed_fieldskvupdatess          r    update_courserK   X   s    SN &X!2Et!tqtGX$LLN334GHGLHHVFII23::7CIIK Y   B9B9B9c                     U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a"  U R                  U5        U R                  5         gg)z)Delete a course and its lessons (cascade)TF)r0   r   r2   r   r7   deleter=   )r.   r&   r   s      r    delete_courserO   g   K    XXf$$VYY)%;<BBDF
		&
		r"   c                    U R                  [        5      R                  [        R                  U:H  5      R	                  [        R
                  R                  5       [        R                  R                  5       5      R                  5       $ )zGet all sections for a course)	r0   r   r2   r&   r3   r   r   r   r4   r8   s     r    get_sections_by_courserR   s   sa    88G##G$5$5$BCLL!  
cer"   c                     [        UUUUS9nU R                  U5        U R                  5         U R                  U5        UR                  $ )zCreate a new section)r&   r   r   r   )r   r<   r=   r>   r   )r.   r&   r   r   r   sections         r    create_sectionrU   {   sF     	G FF7OIIKJJw::r"   r'   c                 ~   / SQnUR                  5        VVs0 s H  u  pEXC;   d  M  Uc  M  XE_M     nnnU(       d  g[        R                  " 5       R                  S5      US'   U R	                  [
        5      R                  [
        R                  U:H  5      R                  U5        U R                  5         gs  snnf )zUpdate a section)r   r   r   FrA   r   T)
rB   r   rC   rD   r0   r   r2   r   rE   r=   )r.   r'   rF   rG   rH   rI   rJ   s          r    update_sectionrW      s    <N &X!2Et!tqtGX$LLN334GHGLHHWWZZ:56==gFIIK YrL   c                     U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a"  U R                  U5        U R                  5         gg)zDelete a sectionTF)r0   r   r2   r   r7   rN   r=   )r.   r'   rT   s      r    delete_sectionrY      sK    hhw&&wzzZ'?@FFHG
		'
		r"   c                 n   U R                  [        5      R                  [        R                  U:H  5      nU(       a"  UR                  [        R                  U:H  5      nUR                  [        R                  R                  5       [        R                  R                  5       5      R                  5       $ )zGet all lessons for a course)
r0   r   r2   r&   r   r3   r   r   r   r4   )r.   r&   r   r0   s       r    get_lessons_by_courser[      s~    HHV##F$4$4	$ABEV]]f45>>  
cer"   c                    U R                  [        5      R                  [        R                  U:H  5      R	                  [        R
                  R                  5       [        R                  R                  5       5      R                  5       $ )zGet all lessons for a section)	r0   r   r2   r'   r3   r   r   r   r4   )r.   r'   s     r    get_lessons_by_sectionr]      sa    88F""6#4#4
#BCLL  
cer"   	lesson_idc                     U R                  [        5      R                  [        R                  U:H  5      R	                  5       $ )zGet a single lesson by ID)r0   r   r2   r   r7   )r.   r^   s     r    get_lesson_by_idr`      r:   r"   r(   r)   r*   r+   r,   c                     [        UUUUUUUUU	U
US9nU R                  U5        U R                  5         U R                  U5        UR                  $ )zCreate a new lesson)r&   r'   r   r   r(   r)   r*   r   r   r+   r,   )r   r<   r=   r>   r   )r.   r&   r   r(   r'   r   r)   r*   r   r   r+   r,   r#   s                r    create_lessonrb      s[     !!)%'F FF6NIIKJJv99r"   c                 ~   / SQnUR                  5        VVs0 s H  u  pEXC;   d  M  Uc  M  XE_M     nnnU(       d  g[        R                  " 5       R                  S5      US'   U R	                  [
        5      R                  [
        R                  U:H  5      R                  U5        U R                  5         gs  snnf )zUpdate a lesson)
r   r   r(   r)   r*   r   r   r'   r+   r,   FrA   r   T)
rB   r   rC   rD   r0   r   r2   r   rE   r=   )r.   r^   rF   rG   rH   rI   rJ   s          r    update_lessonrd      s    :N !'X!2Et!tqtGX$LLN334GHGLHHVFII23::7CIIK YrL   c                     U R                  [        5      R                  [        R                  U:H  5      R	                  5       nU(       a"  U R                  U5        U R                  5         gg)zDelete a lessonTF)r0   r   r2   r   r7   rN   r=   )r.   r^   r#   s      r    delete_lessonrf      rP   r"   user_idc                     U R                  [        5      R                  [        R                  U:H  5      R	                  [        [        R                  5      5      R                  5       $ )zGet all enrollments for a user)r0   r   r2   rg   optionsr   r   r4   )r.   rg   s     r    get_user_enrollmentsrj      sI    88J&&z'9'9W'DEMM:$$%	cer"   c                     U R                  [        5      R                  [        R                  U:H  5      R	                  5       $ )z Get all enrollments for a course)r0   r   r2   r&   r4   r8   s     r    get_course_enrollmentsrl      s0    88J&&z';';y'HIMMOOr"   c                     U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nUSL$ )z%Check if user is enrolled in a courseN)r0   r   r2   rg   r&   r7   r.   rg   r&   
enrollments       r    is_user_enrolledrp      sP    *%,,g%	) eg  T!!r"   c                 b   U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nU(       a  UR                  $ [        UUS9nU R                  U5        U R                  5         U R                  U5        UR                  $ )zEnroll a user in a course)rg   r&   )
r0   r   r2   rg   r&   r7   r   r<   r=   r>   )r.   rg   r&   existingro   s        r    enroll_userrs   	  s     xx
#**g%	) eg 
 {{J FF:IIKJJz==r"   c                     U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       nU(       a"  U R                  U5        U R                  5         gg)zUnenroll a user from a courseTF)r0   r   r2   rg   r&   r7   rN   r=   rn   s       r    unenroll_userru     sc    *%,,g%	) eg 
 
		*
		r"   c                    U R                  [        R                  5      R                  [        R                  U:H  5      R                  5       nU Vs/ s H  oDS   PM	     nnU(       d  / $ U R                  [        5      R                  [        R                  U:H  [        R                  R                  U5      5      R                  5       $ s  snf )z8Get all progress records for a user in a specific courser   )
r0   r   r   r2   r&   r4   r   rg   r^   in_)r.   rg   r&   
lesson_idslids        r    get_user_progress_for_courserz   .  s    &))$++F,<,<	,IJNNPJ$./JSa&JJ/	88H$$G#z* 
ce 0s   Cc                     U(       a  [        XU5      $ U R                  [        5      R                  [        R                  U:H  5      R                  5       $ )z2Get user's progress, optionally filtered by course)rz   r0   r   r2   rg   r4   )r.   rg   r&   s      r    get_user_progressr|   ;  sB    +BCC 88H$$X%5%5%@AEEGGr"   c                     U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       $ )z2Get progress record for a specific user and lesson)r0   r   r2   rg   r^   r7   )r.   rg   r^   s      r    get_user_lesson_progressr~   E  sC    88H$$G#i' egr"   c                    U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       n[        R                  " 5       R                  S5      nU(       a/  SUl	        XCl
        XCl        U R                  5         UR                  $ [        UUSUUS9nU R                  U5        U R                  5         U R                  U5        UR                  $ )z%Mark a lesson as completed for a userrA      rg   r^   	completedcompleted_atlast_accessed_atr0   r   r2   rg   r^   r7   r   rC   rD   r   r   r   r=   r   r<   r>   r.   rg   r^   progressrC   new_progresss         r    mark_lesson_completedr   M  s    xx!((G#i' eg 
 ,,.
!
!"5
6C #$'!
		{{ 
 	|
		


< r"   r   c                 J   U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       n[        R                  " 5       R                  S5      nU(       aG  U(       a  SOSUl	        U(       a  XTl
        OSUl
        XTl        U R                  5         UR                  $ [        UUU(       a  SOSU(       a  UOSUS9nU R                  U5        U R                  5         U R                  U5        UR                  $ )z)Update lesson progress (completed status)rA   r   r   Nr   r   )r.   rg   r^   r   r   rC   r   s          r    update_progressr   k  s    xx!((G#i' eg 
 ,,.
!
!"5
6C"+Q$'!$(H!$'!
		{{$a! )t 
 	|
		


< r"   c                    U R                  [        5      R                  [        R                  U:H  [        R                  U:H  5      R                  5       n[        R                  " 5       R                  S5      nU(       a"  XCl	        U R                  5         UR                  $ [        UUSUS9nU R                  U5        U R                  5         U R                  U5        UR                  $ )z&Update last accessed time for a lessonrA   r   )rg   r^   r   r   )r0   r   r2   rg   r^   r7   r   rC   rD   r   r=   r   r<   r>   r   s         r    update_lesson_accessr     s    xx!((G#i' eg 
 ,,.
!
!"5
6C$'!
		{{ 	
 	|
		


< r"   c                 
   U R                  [        5      R                  [        R                  U:H  [        R                  S:H  5      R                  5       nUS:X  a  SSSS.$ U R                  [        5      R                  [        5      R                  [        R                  U:H  [        R                  S:H  [        R                  U:H  [        R                  S:H  5      R                  5       nXC-  S-  nUU[        US5      S.$ )zGet progress stats for a course	publishedr   )totalr   
percentager   d   )r0   r   r2   r&   r   countr   joinrg   r   round)r.   rg   r&   total_countcompleted_countr   s         r    get_course_progress_statsr     s     ((6"))I%$ eg 
 a
 	
 hhx(--f5<<G#aI%$	
 eg  "/#5J $J* r"   )N)NNdraftr   )Nr   )NNNNr   r   NN)4sqlalchemy.ormr   r   
sqlalchemyr   r   typingr   r   r	   r
   r   models.academyr   r   r   r   r   models.userr   strr!   r-   r5   intr9   r?   boolrK   rO   rR   rU   rW   rY   r[   r]   r`   rb   rd   rf   rj   rl   rp   rs   ru   rz   r|   r~   r   r   r   r    r"   r    <module>r      s   .   , ,  J J 
6 d38n $6 d38n 2T T# T$v, TC CS CXf5E C
 Z^@G$%g c s RU $SM:=!*-$g # D g # $ w 3 4=  Z^&'w 3 s RU  #,/w C d w C D 	g 	# 	x} 	X\]cXd 	w C DL C CS CXf5E C QUW[5@X\	g # c  %c]@H'}GOPS} " 03 "*#	 IQQT	 be	2g # D "g # $ W s tJ7G Pw P3 P4
;K P
" "3 "3 "4 "G c c c *g     W s s tT\~ H' HC HHSM HUYZbUc H 3 3 8T\K] g    < # # $ SV @W s s s 4' C C DQTVYQYN r"   