
    i                     *   d dl mZmZmZmZ d dlmZmZ d dlm	Z	m
Z
 d dlZ ede      Zej                  ddg      d	        Zej                  d
dg      d        Zej                  ddg      d        Zej                  ddg      d        Zej                  ddg      d        Zej                  ddg      d        Zej                  ddg      d        Zej                  ddg      d        Zej                  ddg      d        Zy)    )	Blueprintrequestjsonify	send_file)dbUser)DownloadFileDownloadLogNdownloadz/download/filesGET)methodsc                     	 t         j                  j                  d      } t        j                  j                  d      }| r|j                  |       }|j                  t        j                  j                               j                         }t        |D cg c]  }|j                          c}      S c c}w # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u!   다운로드 파일 목록 조회	file_typeT	is_activer   error  N)r   argsgetr	   query	filter_byorder_by
created_atdescallr   to_dict	Exceptionstrr   r   filesfilees        H/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/./src/routes/download.pyget_download_filesr%      s    
/LL$$[1	"",,t,<OOiO8E|66;;=>BBD595459::9 /Q()3../s0   BB< B70B< 7B< <	C'C"C'"C'z/download/files/latestc                     	 t         j                  j                  d      } t        j                  j                  dd      }| r|j                  |       }|j                         }t        |D cg c]  }|j                          c}      S c c}w # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   최신 파일 조회r   T)r   	is_latestr   r   r   N)r   r   r   r	   r   r   r   r   r   r   r   r    s        r$   get_latest_filesr(      s    
/LL$$[1	"",,tt,LOOiO8E		595459::9 /Q()3../s0   A-B /BB B 	B=B82B=8B=POSTc                     	 t        j                         } g d}|D ]  }|| vst        d| di      dfc S  | j                  dd      r5t        j
                  j                  | d   d	      j                  ddi       t	        | d
   | j                  d      | d   | d   | d   | d   | j                  dd            }t        j                  j                  |       t        j                  j                          t        |j                               dfS # t        $ r@}t        j                  j                          t        dt        |      i      dfcY d}~S d}~ww xY w)u   파일 업로드 (관리자용))namer   version	file_path	file_sizer   z is requiredi  r'   Fr   T)r   r'   r+   descriptionr,   r-   r.   )r+   r/   r   r,   r-   r.   r'      r   N)r   get_jsonr   r   r	   r   r   updater   sessionaddcommitr   r   rollbackr   )datarequired_fieldsfieldr"   r#   s        r$   upload_filer:   &   sH   /!T$ED E7,)?@A3FF %
 88K'(({+ )  fk5)*f/;'O;';'hh{E2
 	

t


t||~&++ /


Q()3../s(   !D D CD 	E!!5EE!E!z/download/files/<int:file_id>c                 .   	 t         j                  j                  |       }|j                  st	        ddi      dfS t
        j                  j                  dt              }t
        j                  }t
        j                  j                  d      }t        | |||      }t        j                  j                  |       |xj                  dz  c_        t        j                  j!                          t"        j$                  j'                  |j(                        r"t+        |j(                  d	|j,                  
      S t	        ddi      dfS # t.        $ r@}t        j                  j1                          t	        dt3        |      i      dfcY d}~S d}~ww xY w)u   파일 다운로드r   zFile is not availablei  user_id)typez
User-Agent)file_idr<   
ip_address
user_agent   T)as_attachmentdownload_namezFile not found on serverr   N)r	   r   
get_or_404r   r   r   r   r   intremote_addrheadersr
   r   r3   r4   download_countr5   ospathexistsr-   r   r+   r   r6   r   )r>   r"   r<   r?   r@   logr#   s          r$   download_filerM   J   s;   /!!,,W5~~G%<=>CC ,,""93"7((
__((6
!!	
 	

s 	q 


 77>>$..)T^^4tyyYYG%?@A3FF /


Q()3../s)   9E C?E <E 	F5F	FFz"/download/files/<int:file_id>/infoc                     	 t         j                  j                  |       }t        |j	                               S # t
        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   파일 정보 조회r   r   N)r	   r   rD   r   r   r   r   r>   r"   r#   s      r$   get_file_inforP   m   sW    /!!,,W5t||~&& /Q()3../s   7: 	A%A A% A%PUTc                    	 t         j                  j                  |       }t        j                         }g d}|D ]  }||v st        ||||           |j                  dd      r]t         j                  j                  t         j                  |j                  k(  t         j                  | k7        j                  ddi       t        j                  j                          t        |j                               S # t         $ r@}t        j                  j#                          t        dt%        |      i      dfcY d}~S d}~ww xY w)u#   파일 정보 수정 (관리자용))r+   r/   r'   r   r'   Fr   r   N)r	   r   rD   r   r1   setattrr   filterr   idr2   r   r3   r5   r   r   r   r6   r   )r>   r"   r7   updatable_fieldsr9   r#   s         r$   update_filerW   v   s   /!!,,W5! M%E}eT%[1 &
 88K'%%&&$..87* fk5)*


t||~&& /


Q()3../s%   A C; B7C; ;	E5D?9E?EDELETEc                 n   	 t         j                  j                  |       }t        j                  j                  |       t        j                  j                          t        ddi      S # t        $ r@}t        j                  j                          t        dt        |      i      dfcY d}~S d}~ww xY w)u   파일 삭제 (관리자용)messagezFile deleted successfullyr   r   N)r	   r   rD   r   r3   deleter5   r   r   r6   r   rO   s      r$   delete_filer\      s    /!!,,W5 	

$


	#>?@@ /


Q()3../s   A(A+ +	B445B/)B4/B4z/download/statsc            
         	 t         j                  j                  d      } t        j                  j                  d      }| r|j                  |       }|j                         }t        |      t        d |D              |D cg c]1  }|j                  |j                  |j                  |j                  d3 c}d}t        |      S c c}w # t        $ r"}t        dt        |      i      d	fcY d
}~S d
}~ww xY w)u   다운로드 통계r   Tr   r   c              3   4   K   | ]  }|j                     y w)N)rH   ).0r"   s     r$   	<genexpr>z%get_download_stats.<locals>.<genexpr>   s     "I544#6#65s   )r+   r,   rH   r   )total_filestotal_downloadsr!   r   r   N)r   r   r   r	   r   r   r   lensumr+   r,   rH   r   r   r   r   )r   r   r!   r"   statsr#   s         r$   get_download_statsrf      s    /LL$$[1	"",,t,<OOiO8E		 u:""I5"II " "D !II#||&*&9&9!%	 "
 u~  /Q()3../s0   BC 6C
:C 
C 	C:C5/C:5C:z/download/file-typesc                  4    dddddddddg} t        |       S )u   파일 타입 목록	installeru   설치 파일)rU   r+   manualu	   매뉴얼r2   u   업데이트)r   )
file_typess    r$   get_file_typesrk      s0     O4-0J
 :    )flaskr   r   r   r   src.models.userr   r   src.models.downloadr	   r
   rI   __name__download_bprouter%   r(   r:   rM   rP   rW   r\   rf   rk    rl   r$   <module>rt      s   8 8 $ 9 	
H-$ug6/ 7/ +eW=/ >/ $vh7!/ 8!/F 2UGD / E /D 7%I/ J/ 2UGD/ E/2 2XJG/ H/" $ug6/ 7/: )E7; <rl   