
    ξi!                     @   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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rS SKr\" SS/S9r\R9                  S5      \" S5      \" SSSSS9\" \5      4S\S\S\S\\   S\4
S jj5       r\R?                  S5      \" \5      4S\S\4S jj5       r \R?                  S5      \" S5      \" S5      \" \5      4S\\   S\\   S\4S jj5       r!\R?                  S 5      \" \5      4S\S\S\4S! jj5       r"g)"    )	APIRouterstatus
UploadFileFileDependsQuery)JSONResponse)FolderClass)StudentClass)get_db)get_current_active_user)	UserLogin)Optional)Session)PathNz/student-document-fileszStudent Document Files)prefixtagsz"/upload/{student_id}/{document_id}.i  i4  u5   Año del período escolar (query; interceptor/cookie))geledescription
student_iddocument_idfileperiod_yeardbc                   #     [        U5      nUR                  U 5      n[        U[        5      (       ao  UR                  S5      (       d  UR                  S5      S:X  aD  [	        [
        R                  SUR                  S5      =(       d    UR                  SS5      SS.S9$ UR                  (       a-  [        UR                  5      R                  R                  5       OS	n[        R                  " 5       R                  SS
 nSU  SU SU U 3n	[        S5      n
U
R                  SSS9  X-  nUR                  5       I Sh  vN n[!        US5       nUR#                  U5        SSS5        [%        U5      nUR'                  U UU	Ub  [)        U5      OSS9n[        U[        5      (       am  UR                  S5      S:X  aX  UR+                  5       (       a   [,        R.                  " U5        [	        [
        R0                  SUR                  SS5      SS.S9$ [	        [
        R2                  SSUR                  S5      UR                  S5      U UU	[)        U5      UR                  S.S.S9$  GN-! , (       d  f       GN= f!    N= f! [4         aB  nUR7                  5         [	        [
        R0                  SS[)        U5       3SS.S9s SnA$ SnAff = f7f)u{   
Sube un archivo de documento para un estudiante y documento específico.
Maneja el control de versiones automáticamente.
errorr     messagezEstudiante no encontradoNr   r   datastatus_codecontent    student__doc__z#files/system/student_document_filesT)parentsexist_okwb)r   r   	file_pathr     z1Error guardando registro del archivo de documento   z(Archivo de documento subido exitosamenteid
version_id)r0   r1   r   r   filenamer-   original_filenamezError subiendo archivo: )r   get
isinstancedictr	   r   HTTP_404_NOT_FOUNDr2   r   suffixloweruuiduuid4hexmkdirreadopenwriter
   storestrexistsosunlinkHTTP_500_INTERNAL_SERVER_ERRORHTTP_201_CREATED	Exceptionrollback)r   r   r   r   r   student_servicestudent_resultfile_extension	unique_idunique_filename
upload_dirr-   r$   fdocument_file_servicestore_resultes                    \C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routers\student_document_files.pyupload_document_filerU      s    "T
&r*(,,Z8nd++1C1CG1L1LP^PbPbckPlpwPw"55!-11':wn>P>PQZ\v>w   @D}}dmm,3399;RT JJL$$Ra(	$ZLk]!I;~N^_ ?@
50	 		#)T"aGGG # !,B,22!#%,7,CK(	 3 
 lD))l.>.>x.HG.S!!IIi(  "AA!+//	;no   //E&**40"."2"2<"@",#. /!$Y)-
 	
; $"""6  	

==5c!fX>
 	
	
s   KBJ #K$B!J I2J I5(A2J J 1+J KAJ 1K2J 5
J?J J	J 
K7KKKKKz/{id}r0   c           	        #     [        U5      nUR                  U 5      n[        U[        5      (       aA  UR                  S5      S:X  a,  [	        [
        R                  SUR                  SS5      SS.S9$ [	        [
        R                  S	S
US.S9$ ! [         a2  n[	        [
        R                  SS[        U5       3SS.S9s SnA$ SnAff = f7f)z,
Obtiene un archivo de documento por su ID.
r   r   r   r   z"Archivo de documento no encontradoNr    r"      zArchivo de documento encontrador.   z'Error obteniendo archivo de documento: )r
   r4   r5   r6   r	   r   r7   HTTP_200_OKrH   rF   rB   )r0   r   rQ   resultrS   s        rT   get_document_filerZ   z   s     
 +B&**2.fd##

8(<(G"55!%zz)5YZ   **<
 	
  
==DSVHM
 	

sA   CA1B 5C6B C
C'C	CC	CCz/listc           	        #     [        U5      nUR                  X5      n[        U[        5      (       aA  UR	                  S5      S:X  a,  [        [        R                  SUR	                  SS5      SS.S9$ [        [        R                  S	U(       a  S
OSUS.S9$ ! [         a2  n[        [        R                  SS[        U5       3SS.S9s SnA$ SnAff = f7f)z_
Lista los archivos de documentos almacenados.
Puede filtrarse por student_id y/o document_id.
r   r   r.   r   z%Error listando archivos de documentosNr    r"   rW   "Archivos de documentos encontrados)No hay archivos de documentos registradosz'Error listando archivos de documentos: )r
   get_allr5   r6   r4   r	   r   rF   rX   rH   rB   r   r   r   rQ   r!   rS   s         rT   list_document_filesr`      s     
 +B$,,ZEdD!!dhhx&8G&C"AA!#xx	3Z[   **CG?Mx
 	
  
==DSVHM
 	

A   CA1B 5C6$B C
C%'CCCCCz,/student/{student_id}/document/{document_id}c           	        #     [        U5      nUR                  X5      n[        U[        5      (       aA  UR	                  S5      S:X  a,  [        [        R                  SUR	                  SS5      SS.S9$ [        [        R                  S	U(       a  S
OSUS.S9$ ! [         a2  n[        [        R                  SS[        U5       3SS.S9s SnA$ SnAff = f7f)u   
Obtiene todos los archivos de documento para un estudiante y documento específico.
Útil para ver el historial de versiones.
r   r   r.   r   z'Error obteniendo archivos de documentosNr    r"   rW   r\   r]   z)Error obteniendo archivos de documentos: )r
   get_by_student_and_documentr5   r6   r4   r	   r   rF   rX   rH   rB   r_   s         rT   *get_document_files_by_student_and_documentrd      s     
 +B$@@YdD!!dhhx&8G&C"AA!#xx	3\]   **CG?Mx
 	
  
==Fs1vhO
 	

ra   )#fastapir   r   r   r   r   r   fastapi.responsesr	   /app.backend.classes.student_document_file_classr
   !app.backend.classes.student_classr   app.backend.db.databaser   app.backend.auth.auth_userr   app.backend.schemasr   typingr   sqlalchemy.ormr   pathlibr   rD   r:   student_document_filespostintrU   r4   rZ   r`   rd        rT   <module>rt      s   G G * G : * > )  "  	 "$
"	# 
 AB Cy!&K	" &/d
d
d
 d
 #	d
 	d
 Cd
L G$ &/&
&
&
 %&
P G$ %d!&t&/(
(
#(
 	(
 %(
T JK &/(
(
(
 	(
 L(
rs   