
    Miz'              
          S SK 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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
/S9r\R/                  S5      \" SSS9\" SSS9\" \
5      \" \5      4S\\   S\S\S\4S jj5       r\R/                  S5      \" \
5      \" \5      4S\S\S\4S jj5       r\R/                  S5      \" SSS9\" \
5      \" \5      4S\S\S\4S jj5       r\R;                  S5      \" \
5      \" \5      4S\S\S\4S jj5       r\R/                  S5      \" \
5      \" \5      4S \S\S\4S! jj5       r\R;                  S"5      \" \
5      \" \5      4S\S\S\4S# jj5       r \RC                  S5      \" \
5      \" \5      4S \S\S\S\4S$ jj5       r"\RG                  S5      \" \
5      \" \5      4S \S\S\4S% jj5       r#g)&    )	APIRouterDependsQuerystatus)JSONResponse)get_db)get_current_active_user)	UserLoginStoreCourseDiversityResponseUpdateCourseDiversityResponse StoreCourseDiversityObservations)CourseDiversityResponseClass)Session)Optionalz/course_diversity_responseszCourse Diversity Responses)prefixtags Nz-1 o omitir = no filtrar)descriptionFz1True = incluir registros con deleted_date (todos)	course_idinclude_deletedsession_userdbc           	          [        U5      R                  XS9nUR                  S5      S:X  a,  [        [        R                  SUR                  SS5      / S.S9$ [        [        R
                  S	S
UR                  S/ 5      S.S9$ ! [         a/  n[        [        R                  S[        U5      / S.S9s SnA$ SnAff = f)zcLista respuestas. Filtro opcional por course_id. include_deleted=true devuelve todos los registros.)r   r   r   error  messagezError al listarr   r   datastatus_codecontent   OKr   N)r   getr   r   HTTP_500_INTERNAL_SERVER_ERRORHTTP_200_OK	Exceptionstr)r   r   r   r   resultes         `C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routers\course_diversity_responses.pyget_listr,      s    
-b155	5k::h7*"AA#&6::iIZ3[egh  **"tVZZPR=ST
 	
  
=="s1vrB
 	

s$   AB +B 
C $B;5C ;C z/by_course/{course_id}c           	          [        U5      R                  U S9nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      / S.S9$ [        [        R                  S	S
UR                  S/ 5      UR                  S5      S.S9$ ! [         a/  n[        [        R
                  S[        U5      / S.S9s SnA$ SnAff = f)zlEstructura completa para el curso: criterios, opciones, respuesta por criterio, student_ids y observaciones.r   r   r   r   r   Errorr   r   r"   r#   r   observations)r   r   r   r0   N)	r   get_by_course_idr$   r   r   r%   r&   r'   r(   r   r   r   r)   r*   s        r+   r1   r1   /   s    
-b1BBYBW::h7*"AA#&6::i3Q[]^  **

62. &

> :	
 	
  
=="s1vrB
 	

s$   AB ;B 
C!$CCCz/observations.zID del cursoc                     [        U5      R                  U S9nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      SS.S	9$ [        [        R                  S
SUR                  S5      S.S	9$ ! [         a/  n[        [        R
                  S[        U5      SS.S	9s SnA$ SnAff = f)z@Obtiene las observaciones (estrategias de diversidad) del curso.r.   r   r   r   r   r/   Nr   r   r"   r#   r   )	r   get_observationsr$   r   r   r%   r&   r'   r(   r2   s        r+   r4   r4   M   s    
-b1BBYBW::h7*"AA#&6::i3Q[_`  **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   AB *B 
B?$B:4B?:B?r   c                 >    [        U S5      (       a  U R                  5       OU R                  5       n[        UR	                  S5      5      nUR	                  S5      n[        U5      R                  XES9nUR	                  S5      S:X  a,  [        [        R                  SUR	                  SS	5      S
S.S9$ [        [        R                  SUR	                  SS5      S
S.S9$ ! [         a/  n[        [        R                  S[        U5      S
S.S9s S
nA$ S
nAff = f)z`Guarda las observaciones (estrategias de diversidad) del curso en course_diversity_observations.
model_dumpr   r0   )r   r0   r   r   r   r   Error al guardarNr   r   r"   zObservaciones guardadas.)hasattrr6   dictintr$   r   set_observationsr   r   r%   r&   r'   r(   )r   r   r   payloadr   r0   r)   r*   s           r+   store_observationsr=   f   s   
'.t\'B'B$//#		K01	{{>2-b1BBYBr::h7*"AA#&6::iI[3\fjk  **"vzz)E_/`jno
 	
  
=="s1vtD
 	

s$   B4C# 7+C# #
D-$DDDz/{id}idc                     [        U5      R                  U 5      nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      SS.S9$ [        [        R                  S	S
UR                  S5      S.S9$ ! [         a/  n[        [        R                  S[        U5      SS.S9s SnA$ SnAff = f)z3Obtiene una respuesta por id (incluye student_ids).r   r     r   Registro no encontradoNr   r   r"   r#   r   r   )
r   	get_by_idr$   r   r   HTTP_404_NOT_FOUNDr&   r'   r%   r(   r>   r   r   r)   r*   s        r+   rB   rB      s    
-b1;;B?::h7*"55#&6::iIa3blpq  **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   AB *B 
C$B<6C<Cz/storec                     [        U S5      (       a  U R                  5       OU R                  5       n[        U5      R	                  U5      nUR                  S5      S:X  a,  [        [        R                  SUR                  SS5      SS.S	9$ UR                  SS
5      nUR                  S5      b  UR                  S5      OSUR                  S5      0nSUR                  5       ;   =(       d    SU;   nU(       a  [        R                  O[        R                  n[        UXUS.S	9$ ! [         a/  n	[        [        R                  S[        U	5      SS.S	9s Sn	A	$ Sn	A	ff = f)z\Crea o actualiza la respuesta para (course_id, diversity_criterion_id). Incluye student_ids.r6   r   r   r   r   r7   Nr   r   zRegistro creador   r>   
desmarcadozSin registro que borrar)r8   r6   r9   r   storer$   r   r   r%   lowerr&   HTTP_201_CREATEDr'   r(   )
r   r   r   r<   r)   msgdata_out
is_uncheckr    r*   s
             r+   rG   rG      s<   
'.t\'B'B$//#		-b177@::h7*"AA#&6::iI[3\fjk  jj$56)/F);)G6::f%dTZT^T^_cTdMe!SYY[0T4MQT4T
,6f((F<S<S#*HM
 	
  
=="s1vtD
 	

s%   BD) BD) )
E"3$EE"E"c           	      h    [        US5      (       a  UR                  SS9O7UR                  5       R                  5        VVs0 s H  u  pEUc  M
  XE_M     snnn[	        U5      R                  X5      nUR                  S5      S:X  a,  [        [        R                  SUR                  SS	5      SS
.S9$ [        [        R                  SUR                  SS5      SUR                  S5      0S
.S9$ s  snnf ! [         a/  n[        [        R                  S[        U5      SS
.S9s SnA$ SnAff = f)z7Actualiza una respuesta por id (opcional: student_ids).r6   T)exclude_unsetNr   r   r@   r   rA   r   r   r"   zRegistro actualizador>   r   )r8   r6   r9   itemsr   updater$   r   r   rC   r&   r'   r%   r(   )	r>   r   r   r   kvr<   r)   r*   s	            r+   rP   rP      s4   
9@|9T9T$///5lplululwl}l}l  [Rldhde  DE[_[\[_l  [R-b188E::h7*"55#&6::iIa3blpq  **"vzz)E[/\gkmsmwmwx|m}f~
 	
 [R  
=="s1vtD
 	

s=   AC8 	C2C2AC8 5<C8 2C8 8
D1$D,&D1,D1c                     [        U5      R                  U 5      nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      SS.S9$ [        [        R                  S	UR                  SS
5      SS.S9$ ! [         a/  n[        [        R                  S[        U5      SS.S9s SnA$ SnAff = f)u    Borrado lógico de la respuesta.r   r   r@   r   rA   Nr   r   r"   zRegistro eliminador   )
r   deleter$   r   r   rC   r&   r'   r%   r(   rD   s        r+   rT   rT      s    
-b188<::h7*"55#&6::iIa3blpq  **"vzz)EY/Zdhi
 	
  
=="s1vtD
 	

s$   AB	 +B	 	
C$B=7C=C)$fastapir   r   r   r   fastapi.responsesr   app.backend.db.databaser   app.backend.auth.auth_userr	   app.backend.schemasr
   r   r   r   3app.backend.classes.course_diversity_response_classr   sqlalchemy.ormr   typingr   course_diversity_responsesr$   r:   boolr,   r1   r4   postr=   rB   rG   putrP   rT        r+   <module>rc      s   5 5 * * >  ] " &(
&	'  #$T7QR!%5hi%&=>&/	
}

 
 		
 $
2  89 &&=>&/


 	
 :
: 03N;%&=>&/


 	
 1
0   1 &&=>&/

*

 	
 2
6 ( &&=>&/


 	
 )
0   * &&=>&/

&

 	
 +
< ( &&=>&/	


'
 
 		
 )
4 ""7+ &&=>&/


 	
 ,
rb   