
    Uh                        S SK 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  S SKJr  S SK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  S SKJr  S SKJr  \" 5       r\	" 5         \ R>                  " SS5      r \RC                  S5      \" \5      4S\"S\S\#4S jj5       r$\RC                  S5      \" S5      \" S5      \" S5      \" \5      4S\%S\%S\S\#4S jj5       r&\RO                  S5      \" \5      4S\#4S jj5       r(\RO                  S5      \" \5      4S\"S\#4S jj5       r)\RU                  S5      \" S5      \" S5      \" S5      \" \5      4S\"S\%S\%S\S\#4
S jj5       r+\RY                  S5      \" \5      4S\"S\#4S jj5       r-g)     N)	APIRouterDependsHTTPExceptionFileForm
UploadFile)"disable_installed_extensions_check)check_user_is_admin)select)selectinload)GeneralState)Course)Program)CourseProgram)admin)CourseAddRequestFILE_STORAGE_PATHfilesz!/programs/{program_id}/add-course
program_iddatadependenciesc                    Uu  p4UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d
  [        SSS9eUR                  [        5      R                  [        R                  UR                  :H  5      R	                  5       nU(       d
  [        SSS9eUR                  [        5      R                  [        R                  U :H  [        R                  UR                  :H  5      R	                  5       nU(       a
  [        SSS9e[        U UR                  UR                  (       a  UR                  OS S9nUR                  U5        UR                  5         UR                  U5        SUR                   S	UR                   S
3U UR                  UR                  S.$ )N  zProgramme introuvablestatus_codedetailzCours introuvablei  u,   Ce cours est déjà associé à ce programme)r   	course_idorderzCours u    ajouté au programme u    avec succès)messager   r   r   )queryr   filteridfirstr   r   r   r   r   r   addcommitrefresh)	r   r   r   dbr   programcourseexisting_linkcourse_programs	            CD:\kofCorporation\kof-academy-backend\app\routers\admins\courses.pyadd_course_to_programr-      sa    IBhhw&&wzzZ'?@FFHG4KLL XXf$$VYY$..%@AGGIF4GHH 		((J68O8OSWSaSa8a	b	 
 4bcc #.. JJdjjDN
 FF>IIKJJ~ FII;&<WZZLV YY%%	     z/courses.titledescriptionimagec                    Uu  pEU US.nU(       a  [         R                  R                  UR                  5      S   n[        R
                  " 5        U 3n[         R                  R                  [        U5      n	[        U	S5       n
U
R                  UR                  R                  5       5        S S S 5        XS'   [        S0 UD6nUR                  U5        UR                  5         UR                  U5        U$ ! , (       d  f       NQ= f)N)r/   r0      wbr1    )ospathsplitextfilenameuuiduuid4joinr   openwritefilereadr   r$   r%   r&   )r/   r0   r1   r   r'   r   course_dataextr9   filepathfr)   s               r,   create_courserE   J   s     IB "K ggu~~.q1jjl^C5)77<< 18<(D!QGGEJJOO%& "'G"k"FFF6NIIKJJv M "!s   *C;;
D	c                     U u  pUR                  [        [        5      R                  [        R                  [
        R                  :H  5      5      nUR                  5       R                  5       $ )N)	executer   r   wherestater   ACTIVEscalarsall)r   r'   r   results       r,   list_coursesrN   l   sK    IBZZv,,V\\\=P=P-PQRF>>!!r.   z/courses/{course_id}r   c                 4   Uu  p#UR                  [        [        5      R                  [	        [        R
                  5      5      R                  [        R                  U :H  5      5      nUR                  5       R                  5       nU(       d
  [        SSS9eU$ )Nr   Course not foundr   )rG   r   r   optionsr   modulesrH   r"   uniquescalar_one_or_noner   r   r   r'   r   rM   r)   s         r,   get_course_with_modulesrV   u   sp    IBjjv	fnn-	.	vyyI%	&F ]]_//1F4FGGMr.   c                    Uu  pVUR                  [        [        5      R                  [        R                  U :H  5      5      nUR                  5       nU(       d
  [        SSS9eUb  Xl        Ub  X(l        U(       a  [        R                  R                  UR                  5      S   n	[        R                  " 5        U	 3n
[        R                  R                  [         U
5      n[#        US5       nUR%                  UR&                  R)                  5       5        S S S 5        Xl        UR-                  5         UR/                  U5        U$ ! , (       d  f       N7= f)Nr   rP   r   r3   r4   )rG   r   r   rH   r"   rT   r   r/   r0   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r@   r1   r%   r&   )r   r/   r0   r1   r   r'   r   rM   r)   rB   r9   rC   rD   s                r,   update_courserX      s    IB ZZv,,VYY)-CDEF&&(F4FGG ( ggu~~.q1jjl^C5)77<< 18<(D!QGGEJJOO%& "IIKJJvM "!s   2*E
Ec                 $   Uu  p#UR                  [        [        5      R                  [        R                  U :H  5      5      nUR                  5       nU(       d  [        SS5      eSUl        UR                  5         UR                  U5        SS0$ )Nr   rP   DELETEDr   zCourse deleted successfully)
rG   r   r   rH   r"   rT   r   rI   r%   r&   rU   s         r,   delete_courser[      sv    IBZZv,,VYY)-CDEF&&(FC!344FLIIKJJv455r.   ).r6   fastapir   r   r   r   r   r   fastapi_pagination.utilsr	   app.utils.authentificationr
   sqlalchemy.futurer   r:   sqlalchemy.ormr   app.enums.general_stater   app.models.courser   app.models.programr   app.models.course_programr   app.schemasr   schemasapp.schemas.adminr   routergetenvr   postinttupler-   strrE   getrN   rV   putrX   deleter[   r5   r.   r,   <module>rq      s   	 M M G : $  ' 0 % & 3 ( . 
 " $II17; 01 ""56((
( ( 2(V ZcDzT
!"56	  	 B J'./B'C "u " " "#BIJ]B^ s %  $" "# dDzT
!"56!!! ! 	!
 ! $!H %&8?@S8T 
6S 
6 
6 '
6r.   