
    Zhi!              
       &   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      \" \5      4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}.
student_iddocument_idfile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S9n[        U[        5      (       am  UR                  S5      S:X  aX  U
R)                  5       (       a   [*        R,                  " U
5        [	        [
        R.                  SUR                  SS5      SS.S9$ [	        [
        R0                  SSUR                  S5      UR                  S5      U UU[3        U
5      UR                  S.S.S9$  GN! , (       d  f       GN= f!    N= f! [4         aB  nUR7                  5         [	        [
        R.                  SS[3        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_path  z1Error guardando registro del archivo de documento   z(Archivo de documento subido exitosamenteid
version_id)r,   r-   r   r   filenamer)   original_filenamezError subiendo archivo: )r   get
isinstancedictr	   r   HTTP_404_NOT_FOUNDr.   r   suffixloweruuiduuid4hexmkdirreadopenwriter
   storeexistsosunlinkHTTP_500_INTERNAL_SERVER_ERRORHTTP_201_CREATEDstr	Exceptionrollback)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_filerQ      s    S
&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!#% 3 
 lD))l.>.>x.HG.S!!IIi(  "AA!+//	;no   //E&**40"."2"2<"@",#. /!$Y)-
 	
9 $"" 6  	

==5c!fX>
 	
	
s   KBI? #K$B!I? I#I? I&(A#I? I8 "+I? KAI? "K#I? &
I50I? 8I<:I? ?
K	7K KKKKz/{id}r,   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
   r0   r1   r2   r	   r   r3   HTTP_200_OKrD   rA   rC   )r,   r   rM   resultrO   s        rP   get_document_filerV   s   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   rS   "Archivos de documentos encontrados)No hay archivos de documentos registradosz'Error listando archivos de documentos: )r
   get_allr1   r2   r0   r	   r   rA   rT   rD   rC   r   r   r   rM   r   rO   s         rP   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   rS   rX   rY   z)Error obteniendo archivos de documentos: )r
   get_by_student_and_documentr1   r2   r0   r	   r   rA   rT   rD   rC   r[   s         rP   *get_document_files_by_student_and_documentr`      s     
 +B$@@YdD!!dhhx&8G&C"AA!#xx	3\]   **CG?Mx
 	
  
==Fs1vhO
 	

r]   )#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   r?   r6   student_document_filespostintrQ   r0   rV   r\   r`        rP   <module>rp      sp   G G * G : * > )  "  	 "$
"	# 
 AB Cy&/	]
]
]
 ]
 		]
 C]
~ G$ &/&
&
&
 %&
P G$ %d!&t&/(
(
#(
 	(
 %(
T JK &/(
(
(
 	(
 L(
ro   