
    U+i&              
          d dl 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mZmZmZmZ d dlmZ d dlmZ d dlmZ  ed	d
g      Zej/                  d       edd       edd       ee
       ee      fdee   dededefd       Zej/                  d       ee
       ee      fdededefd       Zej/                  d       edd       ee
       ee      fdededefd       Zej;                  d       ee
       ee      fdededefd       Zej/                  d       ee
       ee      fd ededefd!       Zej;                  d"       ee
       ee      fdededefd#       Z ejC                  d       ee
       ee      fd edededefd$       Z"ejG                  d       ee
       ee      fd ededefd%       Z#y)&    )	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           	         	 t        |      j                  | |      }|j                  d      dk(  r/t        t        j                  d|j                  dd      g d      S t        t        j
                  d	d
|j                  dg       d      S # t        $ r2}t        t        j                  dt        |      g d      cY d}~S d}~ww xY w)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         V/var/www/pie360backend.cl/public_html/app/backend/routes/course_diversity_responses.pyget_listr,      s    
-b155	[j5k::h7*"AA#&6::iIZ3[egh  **"tVZZPR=ST
 	
  
=="s1vrB
 	

s$   AB !.B 	C'C CCz/by_course/{course_id}c           	         	 t        |      j                  |       }|j                  d      dk(  r/t        t        j
                  d|j                  dd      g d      S t        t        j                  d	d
|j                  dg       |j                  d      d      S # t        $ r2}t        t        j
                  dt        |      g d      cY d}~S d}~ww xY w)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                    	 t        |      j                  |       }|j                  d      dk(  r/t        t        j
                  d|j                  dd      dd	      S t        t        j                  d
d|j                  d      d	      S # t        $ r2}t        t        j
                  dt        |      dd	      cY d}~S d}~ww xY w)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 	C	'C>C	C	r   c                 J   	 t        | d      r| j                         n| j                         }t        |j	                  d            }|j	                  d      }t        |      j                  ||      }|j	                  d      dk(  r/t        t        j                  d|j	                  dd	      d
d      S t        t        j                  d|j	                  dd      d
d      S # t        $ r2}t        t        j                  dt        |      d
d      cY d
}~S d
}~ww xY w)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$//#		K01	{{>2-b1BBYeqBr::h7*"AA#&6::iI[3\fjk  **"vzz)E_/`jno
 	
  
=="s1vtD
 	

s$   B5C' 8.C' '	D"0'DD"D"z/{id}idc                    	 t        |      j                  |       }|j                  d      dk(  r/t        t        j
                  d|j                  dd      dd      S t        t        j                  d	d
|j                  d      d      S # t        $ r2}t        t        j                  dt        |      dd      cY d}~S d}~ww xY w)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'C=CCz/storec                    	 t        | d      r| j                         n| j                         }t        |      j	                  |      }|j                  d      dk(  r/t        t        j                  d|j                  dd      dd	      S |j                  dd
      }|j                  d      |j                  d      nd|j                  d      i}d|j                         v xs d|v }|rt        j                  nt        j                  }t        ||||d	      S # t        $ r2}	t        t        j                  dt        |	      dd	      cY d}	~	S d}	~	ww xY w)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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#*sHM
 	
  
=="s1vtD
 	

s%   BD BD 	E&'EEEc           	      n   	 t        |d      r|j                  d      n4|j                         j                         D ci c]  \  }}|	|| c}}}t	        |      j                  | |      }|j                  d      dk(  r/t        t        j                  d|j                  dd	      dd
      S t        t        j                  d|j                  dd      d|j                  d      id
      S c c}}w # t        $ r2}t        t        j                  dt        |      dd
      cY d}~S d}~ww xY w)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      s7   
9@|9T$///5lplululwl}l}l  [Rdhdegh  DE  DQ[\^_[_  [R-b188WE::h7*"55#&6::iIa3blpq  **"vzz)E[/\gkmsmwmwx|m}f~
 	
 [R  
=="s1vtD
 	

s<   ?C9 
C3C3A!C9 3?C9 3C9 9	D4'D/)D4/D4c                    	 t        |      j                  |       }|j                  d      dk(  r/t        t        j
                  d|j                  dd      dd      S t        t        j                  d	|j                  dd
      dd      S # t        $ r2}t        t        j                  dt        |      dd      cY d}~S d}~ww xY w)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	'C>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   