
    A7i{                     n   d dl mZ d dlmZmZmZmZmZ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 d dlmZ d d	lmZ d d
lmZ d dlmZmZm Z m!Z!  ee"      Z# eddg      Z$e$jK                  deejL                  dd       e	dd       edd       ee       e eejN                  ejP                              fde)dededefd       Z*e$jW                  dee   ejX                  dd       e
dd        e
d!dd"#       e
d$       e
d%       e
d&       ee       e eejN                  ejP                              fd'e-d(e-d)ee)   d*ee)   d+ee)   dedefd,       Z.e$jW                  d-eejX                  d.d/       ee       e eejN                  ejP                              fd0e-dedefd1       Z/e$ja                  d2eejX                  d3d4       e	d$d5       ed$d6       ee       e eejN                  ejP                              fd0e-dee)   d7ee   dedef
d8       Z1y$)9    )Optional)	APIRouterFile
UploadFileDependsHTTPExceptionstatusFormQuery)Session)get_session)require_roles)UserRole)ProductTemplateReadProductTemplateListResponse)PaginatedResponse)ProductTemplateService)setup_logger)ERR_PSD_PROCESSING_FAILEDERR_RETRIEVE_PSDERR_UPDATE_TEMPLATEERR_DELETE_TEMPLATEz/api/product-templateszProduct Templates)prefixtagsz/uploadz#Upload a new product template (PSD)zKUpload a PSD file, create a DB record and generate an optional PNG preview.)response_modelstatus_codesummarydescription.z$Human-friendly name of the template.)r   zPSD file to upload.namepsd_filedbcurrent_userc                    K   	 t        j                  | ||j                  |       d{   }|S 7 # t        $ r  t        $ r5 t
        j                  d       t        t        j                  t              w xY ww)z=
    Upload a PSD product template and persist metadata.
    )r    r!   user_idsessionNz"Unexpected error during PSD uploadr   detail)
r   upload_templateidr   	Exceptionlogger	exceptionr	   HTTP_500_INTERNAL_SERVER_ERRORr   )r    r!   r"   r#   tpls        R/var/www/html/story-book/Story-Book-python-api/app/api/routes/product_templates.pyupload_product_templater1      s}      q*:: OO	
 
 

   q=>(M(MVoppqs&   A=&3 13 A=3 AA::A=z/listzList product templatesz'Retrieve non-deleted product templates.   )ge
      )r3   leN
created_atdescpagelimitsearchsort_byorderc                 
   	 |dvrt        dd      |dvrt        dd      t        j                  || ||||      }|S # t         $ r  t        $ r1 t        j                  d       t        t        j                  d	      w xY w)
z Return active product templates.)r*   r    r7   
updated_ati  zInvalid sort_by field)ascr8   zInvalid order)r&   r9   r:   r;   r<   r=   z&Database error while listing templateszFailed to retrieve templatesr'   )r   r   list_templatesr+   r,   r-   r	   r.   )r9   r:   r;   r<   r=   r"   r#   results           r0   list_product_templatesrC   4   s    "
DD%<=='_55'66
   
AB==1
 	

s
   <? ABz/detail/{template_id}zGet product template detailz)Retrieve a single product template by ID.template_idc                     	 t        j                  | |      }|S # t        $ r  t        $ r5 t        j                  d       t        t        j                  t              w xY w)z@
    Retrieve a template by ID, ensuring it is not deleted.
    z1Unexpected error while retrieving template detailr'   )	r   get_template_by_idr   r+   r,   r-   r	   r.   r   )rD   r"   r#   r/   s       r0   get_product_templaterG   \   s`    

$77RH
  
LM==#
 	

s
    AA!z/update/{template_id}zUpdate a product templatez:Update name and/or replace PSD file (regenerates preview).zNew name for template.zOptional replacement PSD file.new_psdc                    K   	 t        j                  | |||       d{   }|S 7 # t        $ r  t        $ r5 t        j                  d       t        t        j                  t              w xY ww)z3Update the product template's metadata and/or file.)rD   r    rH   r&   Nz(Unexpected error while updating templater'   )	r   update_templater   r+   r,   r-   r	   r.   r   )rD   r    rH   r"   r#   r/   s         r0   update_product_templaterK   w   sy     k*::#	
 
 

   kCD(M(MVijjks&   A3) ') A3) AA00A3)2typingr   fastapir   r   r   r   r   r	   r
   r   sqlmodelr   app.db.sessionr   app.api.depsr   app.models.userr   r   app.schemas.product_templater   r   app.schemas.commonr   %app.services.product_template_servicer   app.core.loggingr   app.core.constantsr   r   r   r   __name__r,   routerpostHTTP_201_CREATED
SUPERADMINADMINstrr1   getHTTP_200_OKintrC   rG   patchrK        r0   <module>rd      s    \ \ \  & & & Y 0 H )  
h		2:M9N	O&''1]   S&LM1FG+& t

!KL	q
qq 	q 	qq. $%89""$9   aAraC(!$K"<0 =+& t

!KL



 SM
 c]	

 C=
 	
 

B &"");   +& t

!KL


 

( &""'L   t1IJ$(;[$\+& t

!KLkk
3-k j!k 		k
 kkrc   