
    
i
                     \   d dl mZmZmZmZmZ d dlmZ d dl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  ed
dg      Zej3                  d       ee       edd       edd       edd       eddd       edddd      fdedee   deded ed!efd"       Zy)#    )	APIRouterDependsQueryHTTPExceptionstatus)Session)or_descasc)Optional)get_db)Course)	CourseOut)jsonable_encoder)JSONResponsez/coursesCourses)prefixtags/Nz5Search keyword for topic, language, degree, or skills)description
created_atz)Field to sort by (e.g. created_at, topic)r
   zSorting order: asc or desc   zPage number)ger   
   d   zItems per page)r   ler   dbsearchsort_by
sort_orderpageNorecordsPerPagec           
         | j                  t              }|rd| d}|j                  t        t        j                  j                  |      t        j                  j                  |      t        j                  j                  |      t        j                  j                  |                  }|j                         }t        t        |      rIt        t        |      }	|j                  |j                         dk(  rt        |	      n
t        |	            }nt!        dd|       |j#                  |dz
  |z        j%                  |      j'                         }
|
st!        t(        j*                  d      |
D cg c]  }t-        j.                  |       }}t1        |      }t3        t(        j4                  d||||d	t(        j4                  
      S c c}w )zK
    Get a paginated list of courses with optional search and sorting.
    %r   i  zInvalid sort field: )status_codedetailr   zNo courses foundzCourses retrieved successfully)r%   messagetotal_countpagelimitdata)contentr%   )queryr   filterr	   topicilikelanguagedegreeskillscounthasattrgetattrorder_bylowerr   r
   r   offsetr*   allr   HTTP_404_NOT_FOUNDr   from_ormr   r   HTTP_200_OK)r   r   r   r    r!   r"   db_querysearch_patternr(   sort_columncoursescoursecourse_listcourse_jsons                 ;/var/www/html/syllabuild_admin/backend/api/routes/course.pylist_coursesrF      s    xxH VHA??"">2%%n5##N3##N3	
 .."K vwfg.$$9I9I9Ku9TS%5Z^_jZkl6J7)4TUU oovz^;<BB>RVVXG (A(AJ\]] =DD&9%%f-DKD";/K !--7&#
 &&
 
	 Es   =G)fastapir   r   r   r   r   sqlalchemy.ormr   
sqlalchemyr	   r
   r   typingr   
db.sessionr   db.models.courser   db.schemas.courser   fastapi.encodersr   fastapi.responsesr   routergetstrintrF        rE   <module>rV      s    D D " % %   # ' - *	*I;	7 C&/!$4kl3^_F0LMa];qS>NO;;SM; ; 	;
 ; ; ;rU   