
    i{                     J   d dl Z d dlmZmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
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 d dlmZ d dl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$ d dl%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z,  e       fdededefdZ-dede.fdZ/dede.fdZ0y)    N)datetimetimezone)Optional)UUID)HTTPExceptionstatus)Stringcastfunc)IntegrityError)Session)over)StreamingResponse)DownloadFiles)DownloadFilesCreateSchemaDownloadFilesOutputSchemaDownloadFilesUpdateSchema)File)settings)APIException)API_PREFIXESEXPORT_DATA_SUB_FOLDER)ExportDataTypesExportDataTypesFileNameExportDataTypesHeaders)get_latest_file_by_prefix)QueryPaginatordbpayloadreturnc                   K   	 | j                  t              j                  t        j                  |j                  k(        j                         }|s(t        ddt              it        j                  d      	 	 t        |j                  |j                        }| j                  |       | j                          | j!                  |       t#        j$                  |      S # t        $ r-}t        ddt        |      it        j                  d      d}~ww xY w# t        $ r-}t        ddt        |      it        j                  d      d}~ww xY ww)	a  
    Create a new download file entry in the database.
    Args:
        db (Session): Database session dependency.
        payload (DownloadFilesCreateSchema): Data for creating the download file.
    Returns:
        DownloadFilesOutputSchema: The created download file entry.
    Raises:
        APIException: If the file does not exist or if there is an error during creation.
    create_download_file	exceptionzFile not found.moduleerrorstatus_codemessagezFailed to retrieve file.N)file_id	file_typezFailed to create download file.)queryr   filteridr)   firstr   strr   HTTP_404_NOT_FOUND	ExceptionHTTP_500_INTERNAL_SERVER_ERRORr   r*   addcommitrefreshr   from_orm)r   r   uploaded_fileenew_download_files        e/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/export_data/services/download_file.pyr"   r"       s4    
--dgg.HIOOQ-"CF+"55)	  
)!$$''
 	 !
		


$%(112CDD!  
)A'==.	
 	

"  
)A'==5	
 	

sN   EA7C% ;E=A'D $E%	D.(DDE	E'(EEEc                 l  K   	 i }t         j                  j                  t        j                         t        d      }t        j
                  |d       t        D ]  }t        |j                     j                  }t        ||      }|r`t         j                  j                  |t        j                               t         j                  j                  |      d||j                  <   d||j                  <    |S # t        $ r-}t        ddt        |      it         j"                  d	      d}~ww xY ww)

    For every type in ExportDataTypes, get the latest DownloadFile by created_at DESC.
    If a type has no file, value will be None.
    
masterdataTexist_ok	file_path	file_nameNget_all_latest_download_filesr#   z&Failed to fetch latest download files.r$   ospathjoingetcwdr   makedirsr   r   namevaluer   relpathbasenamer1   r   r/   r   r2   r   result	directoryexport_typefile_prefixlatest_filer8   s          r:   rC   rC   Q   s     
GGLL.DlS	
I-* 		0K1+2B2BCIIK3I{KK!#biik!J!#!1!1+!>,{''(
 ,0{''(		0  
2A'==<	
 	

)   D4C6C; :D4;	D1(D,,D11D4c                 l  K   	 i }t         j                  j                  t        j                         t        d      }t        j
                  |d       t        D ]  }t        |j                     j                  }t        ||      }|r`t         j                  j                  |t        j                               t         j                  j                  |      d||j                  <   d||j                  <    |S # t        $ r-}t        ddt        |      it         j"                  d	      d}~ww xY ww)
r<   
uploaddataTr>   r@   Nget_all_latest_uploaded_filesr#   z&Failed to fetch latest uploaded files.r$   rD   rN   s          r:   rW   rW   s   s     
GGLL.DlS	
I-* 		0K1+2B2BCIIK3I{KK!#biik!J!#!1!1+!>,{''(
 ,0{''(		0  
2A'==<	
 	

rT   )1rE   r   r   typingr   uuidr   fastapir   r   
sqlalchemyr	   r
   r   sqlalchemy.excr   sqlalchemy.ormr   sqlalchemy.sqlr   starlette.responsesr   'src.apps.export_data.models.export_datar   (src.apps.export_data.schemas.export_datar   r   r   src.apps.files.models.filer   src.core.configr   src.core.exceptionsr   src.utils.constantsr   r   src.utils.enumsr   r   r   src.utils.helpers.functionsr   src.utils.paginationr   r"   dictrC   rW        r:   <module>rl      s    	 '   ) ) ) ) "  1 A 
 , $ , D 
 B /
 *C)D.
.
&.
 .
b

	
D 
 
	 
rk   