
    Xh                        d dl Z d dl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mZ d dlmZ d	Zd
ZdZ ej.                  ed        ej.                  ed        ej.                  ed       	 	 	 	 dde	dededee   dee   dee   defdZde	dedefdZd de	dedefdZde	dedefdZde	dededefdZde	deddfdZ y)!    N)Optional)HTTPException
UploadFilestatus)Session)CDN)File)FileCreateSchemaFileResponseSchemaFileUpdateSchema)QueryPaginatorzuploads/fileszuploads/match_outputszuploads/historyT)exist_okdbupload_file
is_historycreated_by_idname
is_crawlerreturnc                   K   |j                   }| }|s5t        j                  j                  t        |      j                  dd      }y|r5t        j                  j                  t        |      j                  dd      }n4t        j                  j                  t        |      j                  dd      }t        j                  j                  |      }	t        |	d      5 }
|j                          d{   }|
j                  |       ddd       |j                  }| j                  t              j                  t        j                   dk(        j#                         }|st%        dd      t'        ||||||j(                  	      }| j+                  |       | j-                          | j/                  |       |S 7 # 1 sw Y   xY ww)
zA
    Create a File record and save the actual uploaded file.
    \/wbNTi  z,CDN with label 'Crawler Files CDN' not foundstatus_codedetail)original_namer   pathmimer   cdn_id)filenameosr   joinFILE_UPLOAD_DIRreplaceCRAWLER_FILE_UPLOAD_HISTORY_DIRCRAWLER_FILE_UPLOAD_DIRabspathopenreadwritecontent_typequeryr   filter	is_activefirstr   r	   idaddcommitrefresh)r   r   r   r   r   r   r   new_file_name	file_path	full_pathfcontentr   cdnnew_files                  V/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/files/services/file.pycreate_filer=      sn      ((M$oMGGLL-@HHsS	%DmT\\]acfgI%<mLTTUY[^_IGGOOI.	)T" 	a',,..GGGG	
 ''hhsm""3==D#89??AC8fgg''66
 	x
		


8/ /	 	s1   CGG 3F>4G 	B5G>G  G	Gfile_idc                     | j                  t              j                  t        j                  |k(        j	                         }|st        t        j                  d      |S )z 
    Retrieve a file by ID.
    File not foundr   r-   r	   r.   r1   r0   r   r   HTTP_404_NOT_FOUND)r   r>   files      r<   get_filerD   O   sJ     88D>  G!34::<D(A(AJZ[[K    pageper_pagec                     |dz
  |z  }| j                  t              }t        |t        d||d      }|j	                         S )z
    Retrieve a paginated list of files.

    :param db: SQLAlchemy Session
    :param page: Page number (default: 1)
    :param per_page: Items per page (default: 10)
    :return: Paginated files response
       z/filesT)r-   schemaurloffsetlimituse_orm)r-   r	   r   r   paginate)r   rF   rG   rL   r-   	paginators         r<   get_all_filesrQ   Y   sL     Qh("FHHTNE!I rE   c                     | j                  t              j                  t        j                  |k(        j	                         }|st        t        j                  d      |S )z$
    Retrieve a File by its ID.
    r@   r   rA   r   r>   file_objs      r<   get_file_by_idrU   p   sJ     xx~$$TWW%78>>@H(A(AJZ[[OrE   payloadc                     t        | |      }|j                  d      j                         D ]  \  }}t        |||        | j	                          | j                  |       |S )z"
    Update an existing file.
    T)exclude_unset)rD   dictitemssetattrr3   r4   )r   r>   rV   rC   fieldvalues         r<   update_filer^   z   s_     B D48>>@ $ueU#$ IIKJJtKrE   c                    | j                  t              j                  t        j                  |k(        j	                         }|st        t        j                  d      | j                  |       | j                          y)z
    Delete a file by its ID.

    :param db: SQLAlchemy Session
    :param file_id: ID of the file to delete
    :raises HTTPException: if file not found
    r@   r   N)
r-   r	   r.   r1   r0   r   r   rB   deleter3   rS   s      r<   delete_filera      sZ     xx~$$TWW%78>>@H(A(AJZ[[IIhIIKrE   )FNNF)rI   
   )!datetimer"   typingr   fastapir   r   r   sqlalchemy.ormr   src.apps.files.models.cdnr   src.apps.files.models.filer	   src.apps.files.schemas.filer
   r   r   src.utils.paginationr   r$   r'   r&   makedirsboolintstrr=   rD   rQ   rU   r^   ra    rE   r<   <module>rp      s]    	  5 5 " ) + 
 0!1 "3  Od + #d 3 +d ; #'!&111 1 C=	1
 3-1 1 
1h 3 4  g  S    .w   G c 4D  G c d rE   