o
    pg                  
   @   s  d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	m
Z
 d dlm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mZ d dlmZ d dlmZ d dlT d d	lmZ e Z e	 Z!e  e"e #d
d Z$e"e #dd Z%e j&dej'dee!fde
fddZ(e )dee!eej*fdej+de
defddZ,	 e -dee!eej*fde.dej+de
defddZ/e 0dee!eej*fde.de
defddZ1dS )    N)	APIRouterDependsRequestHTTPExceptionstatus)
HTTPBearerHTTPAuthorizationCredentials)JSONResponse)Session
joinedload)load_dotenv)UserFolder	Documents)*)	S3ServiceDB_PATH/STORAGE_PATHz/list)response_modelcredentialsc              
      s   t  }| j}t||}z-|ttj|jk	t
tj }|s*tdW S dd |D }tddd |D W S  tyR } ztddt| dd }~ww )	NzFolder does not exist.c                 S   s   g | ]}t j|qS  )schemasFolderResponsefrom_orm.0folderr   r   ./var/www/html/answerous_api/routers/folders.py
<listcomp>#   s    zget_folders.<locals>.<listcomp>zFolders retrieved successfullyc                 S   s   g | ]}|  qS r   )dictr   r   r   r   r   (   s      Something went wrong: status_codedetail)dbaseSessionLocalr   authget_current_userqueryr   filteruser_idoptionsr   	documentsallerrorResponsesuccessReponse	Exceptionr   str)r   dbtokenuserfoldersfolder_dataer   r   r   get_folders   s&   (r:   z/creater   r4   c              
      s  |j }t||}z| jr| j nd t  | jr| jnd} s(tdW S  r:t fdddD r:tdW S |dkrD|dkrDd}t	 d	krR d d	  n  |
ttj ktj|jk }|rotd
W S t }t }t | jr~| jnd|j||d}	||	 |  ||	 ttt|j d t|	j }
ttt|j d t|	j }tj|
st|
 tj|st| || t dt!j"#|	$ W S  t%y } zt&ddt| dd }~ww )N NoFolder name is required.c                 3       | ]}| v V  qd S Nr   r   charfolder_namer   r   	<genexpr>@       z create_folder.<locals>.<genexpr>\[]}{\$&%#@)()+!^.%Folder name contains characters only.Yes   z6This folder already exists. Please give a unique name.0)name	parent_idr,   sharedsanitized_namer   zFolder successfully created.r!   r"   r#   )'r   r(   r)   rC   stripnormalize_spacesrM   r0   anylenr*   r   r+   rK   r,   firstreplace_special_charactersr   rL   addcommitrefreshr3   	DB_FOLDER	user_coderN   UPLOAD_FOLDERospathexistsmakedirscreate_directoryr1   r   r   r   r    r2   r   )r   r   r4   r5   r6   shared_typeexisting_folderrN   
s3_service
new_folderchroma_dir_namestorage_dir_namer9   r   rB   r   create_folder/   sb   
 (

  


rf   z/update/{folder_id}	folder_idc              
      s  |j }t||}z|ttj| ktj|jk }|s&t	dW S |j
r.|j
 nd t  |jr:|jnd} sCt	dW S  rUt fdddD rUt	dW S |d	krb|dkrbt	d
W S t dkrp d d  n  |ttj ktj|jk }|rt	dW S  |_||_|  |ttj| ktj|jk }	||	 tdtj|	 W S  ty }
 ztddt|
 dd }
~
ww )NFolder not foundr;   r<   r=   c                 3   r>   r?   r   r@   rB   r   r   rD      rE   z update_folder.<locals>.<genexpr>rF   rG   rH   z!Share must be only "Yes" or "No".rI   z:Folder name already exist. Please use another folder name.zFolder successfully updated.r!   r"   r#   )r   r(   r)   r*   r   r+   rg   r,   rS   r0   rC   rO   rP   rM   rQ   rR   rK   rV   rW   r1   r   r   r   r    r2   r   r3   )rg   r   r   r4   r5   r6   ra   r`   is_existupdated_datar9   r   rB   r   update_folderr   sT   (
 ((
rk   z/delete/{folder_id}c              
      s:  |j }t||}z{|ttj| ktj|jk }|s&t	dW S t
tt
|j d t
|j }t
tt
|j d t
|j }tj|rQt| tj|r\t| |ttj| k }|D ]}	||	 |  qk|| |  tdd W S  ty }
 ztddt
|
 dd }
~
ww )Nrh   r   zFolder deleted successfullyr!   r"   r#   )r   r(   r)   r*   r   r+   rg   r,   rS   r0   r3   rX   rY   rN   rZ   r[   r\   r]   shutilrmtreer   r/   deleterV   r1   r2   r   )rg   r   r4   r5   r6   delete_folderrd   re   folder_documentsdocsr9   r   r   r   ro      s:   (  




ro   )2r[   rl   fastapir   r   r   r   r   fastapi.securityr   r   fastapi.responsesr	   sqlalchemy.ormr
   r   dotenvr   db_config.databasedatabaser&   db_config.modelsr   r   r   db_config.schemasr   db_config.authr(   dependencies.helperdependencies.awsutilsr   routersecurityr3   getenvrX   rZ   getFolderListResponser:   postget_dbFolderCreaterf   putintrk   rn   ro   r   r   r   r   <module>   sF    ?./,