
    Bi                        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                    ddg          d	             Ze                    d
dg          d             Ze                    ddg          d             Ze                    ddg          d             Ze                    ddg          d             Ze                    ddg          d             Ze                    ddg          d             Ze                    ddg          d             Ze                    ddg          d             ZdS )    )	Blueprintrequestjsonify	send_file)dbUser)DownloadFileDownloadLogNdownloadz/download/filesGET)methodsc                     	 t           j                            d          } t          j                            d          }| r|                    |           }|                    t          j                                                  	                                }t          d |D                       S # t          $ r*}t          dt          |          i          dfcY d}~S d}~ww xY w)	u!   다운로드 파일 목록 조회	file_typeT	is_activer   c                 6    g | ]}|                                 S  to_dict.0files     L/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/src/routes/download.py
<listcomp>z&get_download_files.<locals>.<listcomp>        9994999    error  N)r   argsgetr	   query	filter_byorder_by
created_atdescallr   	Exceptionstrr   r"   fileses       r   get_download_filesr-      s    
/L$$[11	",,t,<< 	9OOiO88E|6;;==>>BBDD995999::: / / /Q())3......./s   B2B5 5
C)?C$C)$C)z/download/files/latestc                  |   	 t           j                            d          } t          j                            dd          }| r|                    |           }|                                }t          d |D                       S # t          $ r*}t          dt          |          i          dfcY d}~S d}~ww xY w)	u   최신 파일 조회r   T)r   	is_latestr   c                 6    g | ]}|                                 S r   r   r   s     r   r   z$get_latest_files.<locals>.<listcomp>"   r   r   r   r   N)
r   r    r!   r	   r"   r#   r'   r   r(   r)   r*   s       r   get_latest_filesr1      s    
/L$$[11	",,tt,LL 	9OOiO88E		995999::: / / /Q())3......./s   BB 
B;B60B;6B;POSTc                  8   	 t          j                    } g d}|D ]}|| vrt          d| di          dfc S |                     dd          r<t          j                            | d         d	                              ddi           t	          | d
         |                     d          | d         | d         | d         | d         |                     dd                    }t          j	        
                    |           t          j	                                         t          |                                          dfS # t          $ rH}t          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/   r4   descriptionr5   r6   r7   )r4   r8   r   r5   r6   r7   r/      r   N)r   get_jsonr   r!   r	   r"   r#   updater   sessionaddcommitr   r(   rollbackr)   )datarequired_fieldsfieldr   r,   s        r   upload_filerC   &   s   /!!TTT$ 	G 	GED  E)?)?)?@AA3FFFF ! 88K'' 	+(({+ )   fk5)***f//;'O;';'hh{E22
 
 
 	
t

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

Q())3......./s#   6E DE 
F=FFFz/download/files/<int:file_id>c                 (   	 t           j                            |           }|j        st	          ddi          dfS t
          j                            dt                    }t
          j	        }t
          j
                            d          }t          | |||          }t          j                            |           |xj        dz  c_        t          j                                         t"          j                            |j                  rt+          |j        d	|j        
          S t	          ddi          dfS # t.          $ rH}t          j                                         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_idrE   
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   r<   r=   download_countr>   ospathexistsr6   r   r4   r(   r?   r)   )rG   r   rE   rH   rI   logr,   s          r   download_filerV   J   s   /!,,W55~ 	DG%<=>>CC ,""93"77(
_((66
!!	
 
 
 	
s 	q 

 7>>$.)) 	GT^4tyYYYYG%?@AA3FF / / /

Q())3......./s)   8D? C0D? ,D? ?
F	=FFFz"/download/files/<int:file_id>/infoc                     	 t           j                            |           }t          |                                          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"   rM   r   r   r(   r)   rG   r   r,   s      r   get_file_inforY   m   s    /!,,W55t||~~&&& / / /Q())3......./s   ?A 
A6A1+A61A6PUTc                    	 t           j                            |           }t          j                    }g d}|D ]}||v rt          ||||                    |                    dd          rVt           j                            t           j        |j        k    t           j	        | k              
                    ddi           t          j                                         t          |                                          S # t           $ rH}t          j                                         t          dt%          |          i          dfcY d}~S d}~ww xY w)u#   파일 정보 수정 (관리자용))r4   r8   r/   r   r/   Fr   r   N)r	   r"   rM   r   r:   setattrr!   filterr   idr;   r   r<   r>   r   r   r(   r?   r)   )rG   r   r@   updatable_fieldsrB   r,   s         r   update_filer`   v   sO   /!,,W55!! MLL% 	2 	2E}}eT%[111 88K'' 	+%%&$.87*  fk5)***

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

Q())3......./s   D D 
E=E
EEDELETEc                    	 t           j                            |           }t          j                            |           t          j                                         t          ddi          S # t          $ rH}t          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"   rM   r   r<   deleter>   r   r(   r?   r)   rX   s      r   delete_filere      s    /!,,W55 	
$

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

Q())3......./s   A,A/ /
C9=B<6C<Cz/download/statsc                     	 t           j                            d          } t          j                            d          }| r|                    |           }|                                }t          |          t          d |D                       d |D             d}t          |          S # t          $ r*}t          dt          |          i          d	fcY d
}~S d
}~ww xY w)u   다운로드 통계r   Tr   r   c              3   $   K   | ]}|j         V  d S )N)rQ   r   s     r   	<genexpr>z%get_download_stats.<locals>.<genexpr>   s%      "I"I44#6"I"I"I"I"I"Ir   c                 D    g | ]}|j         |j        |j        |j        d S )r4   r5   rQ   r   rj   r   s     r   r   z&get_download_stats.<locals>.<listcomp>   sF         !I#|&*&9!%	   r   )total_filestotal_downloadsr+   r   r   N)r   r    r!   r	   r"   r#   r'   lensumr   r(   r)   )r   r"   r+   statsr,   s        r   get_download_statsrp      s   /L$$[11	",,t,<< 	9OOiO88E		 u::""I"I5"I"I"III  "  
 
 u~~ / / /Q())3......./s   B-B0 0
C$:CC$C$z/download/file-typesc                  <    dddddddddg} t          |           S )u   파일 타입 목록	installeru   설치 파일)r^   r4   manualu	   매뉴얼r;   u   업데이트)r   )
file_typess    r   get_file_typesru      s<     O44--00J
 :r   )flaskr   r   r   r   src.models.userr   r   src.models.downloadr	   r
   rR   __name__download_bprouter-   r1   rC   rV   rY   r`   re   rp   ru   r   r   r   <module>r|      sC   8 8 8 8 8 8 8 8 8 8 8 8 $ $ $ $ $ $ $ $ 9 9 9 9 9 9 9 9 				i
H--$ug66/ / 76/ +eW==/ / >=/ $vh77!/ !/ 87!/F 2UGDD /  / ED /D 7%II/ / JI/ 2UGDD/ / ED/2 2XJGG/ / HG/" $ug66/ / 76/: )E7;;  <;  r   