
    
Ei                     H   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 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 d dlmZm Z  d dl!m"Z"  ee#      Z$ e       Z% ee%jL                        Z&e&jO                  dd        G d d      Z(y)    )Path)
UploadFileHTTPExceptionstatus)Session)uuid4)ProductTemplate)ProductTemplateRead)PaginatedResponse)ProductTemplateRepository)validate_base_filesave_upload_file_streamedsafe_delete)extract_psd_ratio)normalize_unique_name)setup_logger)get_settings)ERR_NOT_FOUNDERR_FILE_INVALID)generate_psd_assetsT)parentsexist_okc                       e Zd Zededededededededefd	       Z	ed
ededz  dedz  dedededefd       Z
edededededz  dedz  dedz  fd       Zed
ededefd       Zed
edefd       Zy)ProductTemplateServicenameunique_namepsd_filewidthheightuser_idsessionreturnc                 D  K   t        |      }t        j                  ||      }|rt        t        j
                  d| d      t        |       	 t        |t               d {   }	t        |	      }
t        |z  }t        |	|      }t!        | ||t#        |	      |
|||d   |d   |d   |d	   |d
   |d   |d   |d         }t        j$                  ||      }|S 7 x# t        $ r5 t        j                  d       t        t        j                  t              w xY ww)Nzunique_name 'z' already exists.status_codedetailzFailed to save PSD filepsd_path
output_dir
base_imagebase_thumbnailmain_black_mask_pathmain_white_mask_pathlogo_black_mask_pathlogo_white_mask_pathcolor_preview_pathcolor_white_mask_path)r   r   uploaded_by	file_pathratior   r   base_image_pathbase_thumbnail_pathr,   r-   r.   r/   r0   r1   )r   r   get_by_unique_namer   r   HTTP_400_BAD_REQUESTr   r   PSD_FILES_DIRECTORY	Exceptionlogger	exceptionHTTP_500_INTERNAL_SERVER_ERRORr   r   r   r	   strcreate)r   r   r   r   r   r    r!   normalized_unique_nameexistingr3   r4   
assets_dirassetstpls                 W/var/www/html/story-book/Story-Book-python-api/app/services/product_template_service.pyupload_templatez&ProductTemplateService.upload_template   sV     "7{!C,??I_`"77&'=&>>OP 
 	8$	l7BUVVI "), )+AA
$!
 .)n"<0 &'7 8!'(>!?!'(>!?!'(>!?!'(>!?%&:;"()@"A
$ (..w<
G W 	l67F,Q,QZjkk	ls1   AD C $C%C )A4D C >DD template_idNnew_psdc                   K   t        j                  ||       }|r|j                  rt        t        j
                  t              |r||_        |r2t        |       	 t        |t               d {   }t        |      }t        |j                  z  }	t!        ||	      }
t#        t%        |j&                               |j(                  rt#        t%        |j(                               |j*                  rt#        t%        |j*                               |j,                  rt#        t%        |j,                               |j.                  rt#        t%        |j.                               |j0                  rt#        t%        |j0                               |j2                  rt#        t%        |j2                               |j4                  rt#        t%        |j4                               |j6                  rt#        t%        |j6                               t9        |      |_        ||_        ||_        ||_        |
d   |_        |
d   |_        |
d   |_        |
d   |_        |
d   |_        |
d   |_        |
d	   |_        |
d
   |_        t        j@                  ||      }|S 7 +# t        $ r  t        t        j                  t              w xY ww)Nr$   r'   r*   r+   r,   r-   r.   r/   r0   r1   )!r   	get_by_id
is_deletedr   r   HTTP_404_NOT_FOUNDr   r   r   r   r9   r:   r=   r   r   r   r   r   r   r3   r5   r6   r,   r-   r.   r/   r0   r1   r>   r4   r   r   update)rG   r   rH   r   r   r!   rD   new_pathr4   rB   rC   s              rE   update_templatez&ProductTemplateService.update_templateW   sS     (11';GcnnF,E,Em\\CHw'p!:7DW!XX
 &h/E -s>J(!%F S]]+,""D!4!456&&D!8!89:''D!9!9:;''D!9!9:;''D!9!9:;''D!9!9:;%%D!7!789((D!:!:;<  MCMCICICJ"("6C$*+;$<C#%+,B%CC$%+,B%CC$%+,B%CC$%+,B%CC$#)*>#?C"&,-D&EC%'..w<
a Y p#0U0U^noops1   AKJ 1J2J 6H&KJ )KKpagelimitsearchsort_byorderc                 j    t        j                  | |||||      \  }}t        t           ||||      S )z*Return all active (not deleted) templates.)r!   rP   rQ   rR   rS   rT   )totalrP   rQ   items)r   list_advancedr   r
   )r!   rP   rQ   rR   rS   rT   rW   rV   s           rE   list_templatesz%ProductTemplateService.list_templates   sK     1>>
u !!45	
 	
    c                     t        j                  ||       }|r|j                  rt        t        j
                  t              |S )zL
        Retrieve a template ensuring it exists and is not deleted.
        r$   )r   rJ   rK   r   r   rL   r   rG   r!   rD   s      rE   get_template_by_idz)ProductTemplateService.get_template_by_id   s7    
 (11';GcnnF,E,Em\\
rZ   c                 |   t        j                  ||       }|st        t        j                  t
              t        j                  ||       t        t        |j                               |j                  rt        t        |j                               |j                  rt        t        |j                               |j                  rt        t        |j                               |j                  rt        t        |j                               |j                  rt        t        |j                               |j                  rt        t        |j                               |j                   rt        t        |j                                |j"                  rt        t        |j"                               yy)z5Soft-delete template and remove files (non-critical).r$   N)r   rJ   r   r   rL   r   soft_delete_templater   r   r3   r5   r6   r,   r-   r.   r/   r0   r1   r\   s      rE   delete_templatez&ProductTemplateService.delete_template   s4    (11';GF,E,Em\\!66wD 	D'(S0012""S4456##S5567##S5567##S5567##S5567!!S3345$$S6678 %rZ   )__name__
__module____qualname__staticmethodr>   r   intr   r	   rF   rO   rY   r]   r`    rZ   rE   r   r      sm   999 9 	9
 9 9 9 
9 9v DDDjD d"D 	D
 D D 
D DL 


 
 d
	

 t
 Tz
 
2  g /   9S 97 9 9rZ   r   N))pathlibr   fastapir   r   r   sqlmodelr   uuidr   app.models.product_templater	   app.schemas.product_templater
   app.schemas.commonr   &app.repositories.product_template_repor   app.utils.imager   r   r   app.utils.psd_ratior   app.utils.slugifyr   app.core.loggingr   app.core.configr   app.core.constantsr   r   app.utils.psd_masksr   ra   r;   settingsr9   mkdirr   rf   rZ   rE   <module>rx      sy     5 5   7 < 0 L V V 1 3 ) ( > 3	h	>8778    $  6D9 D9rZ   