
    mh                        d dl Z d dlmZmZ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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  e       Z e	         e j>                  dd      Z ejC                  d       ee      fde"dede#fd       Z$ejC                  d       ed       ed       ed       ee      fde%de%dede#fd       Z&ejO                  d       ee      fde#fd       Z(ejO                  d       ee      fde"de#fd       Z)ejU                  d       ed       ed       ed       ee      fde"de%de%dede#f
d       Z+ejY                  d       ee      fde"de#fd       Z-y)     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                 t   |\  }}|j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  t              j                  t        j                  |j                  k(        j	                         }|st        dd      |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j	                         }|rt        dd      t        | |j                  |j                  r|j                  nd       }|j                  |       |j                          |j                  |       d|j                   d	|j                   d
| |j                  |j                  d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	            a/Users/theessential/Documents/Github/KofAcademy/kof-academy-backend/app/routers/admins/courses.pyadd_course_to_programr-      sc    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                    |\  }}| |d}|rt         j                  j                  |j                        d   }t	        j
                          | }t         j                  j                  t        |      }	t        |	d      5 }
|
j                  |j                  j                                d d d        |	|d<   t        di |}|j                  |       |j                          |j                  |       |S # 1 sw Y   MxY w)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   *C77D c                     | \  }}|j                  t        t              j                  t        j                  t
        j                  k(              }|j                         j                         S )N)	executer   r   wherestater   ACTIVEscalarsall)r   r'   r   results       r,   list_coursesrN   l   sM    IBZZv,,V\\\=P=P-PQRF>>!!r.   z/courses/{course_id}r   c                 2   |\  }}|j                  t        t              j                  t	        t        j
                              j                  t        j                  | k(              }|j                         j                         }|st        dd      |S )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   sr    IBjjv	fnn-	.	vyyI%	&F ]]_//1F4FGGMr.   c                    |\  }}|j                  t        t              j                  t        j                  | k(              }|j                         }|st        dd      |||_        |||_        |rt        j                  j                  |j                        d   }	t        j                          |	 }
t        j                  j                  t         |
      }t#        |d      5 }|j%                  |j&                  j)                                d d d        ||_        |j-                          |j/                  |       |S # 1 sw Y   3xY w)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   +*EEc                    |\  }}|j                  t        t              j                  t        j                  | k(              }|j                         }|st        dd      d|_        |j                          |j                  |       ddiS )Nr   rP   DELETEDr   zCourse deleted successfully)
rG   r   r   rH   r"   rT   r   rI   r%   r&   rU   s         r,   delete_courser[      sx    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 ( . 
 " $BII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.   