
    i1                     n   d Z ddlmZmZ ddlmZmZ ddlZddlm	Z	 ddl
mZ dd	lmZ  ej                  e      Z e	j"                  d
dg      d        Z e	j"                  ddg      ed               Z e	j"                  ddg      ed               Z e	j"                  ddg      ed               Zy)zA
Portfolio API Routes
CRUD operations for worker portfolio items
    )jsonifyrequest)login_requiredcurrent_userN   )portfolio_bp   )PortfolioItem)dbz/<int:user_id>GET)methodsc                    	 t         j                  j                  |       j                  t         j                  j                         t         j                  j                               j                         }t        |D cg c]  }|j                          c}t        |      | d      dfS c c}w # t        $ r:}t        j                  dt        |              t        ddi      dfcY d}~S d}~ww xY w)	zGet a worker's portfolio items	worker_id)itemstotalr      zError getting portfolio: errorzFailed to get portfolio  N)r
   query	filter_byorder_bydisplay_orderasc
created_atdescallr   to_dictlen	Exceptionloggerr   str)user_idr   itemes       "app/blueprints/portfolio/routes.pyget_portfolior'      s    B##---@Xm115579Q9Q9V9V9XYSU 	 167dlln7Z 
  	 	7
  B0Q9:!:;<cAABs0   A?B3 B.B3 .B3 3	C6</C1+C61C6z/uploadPOSTc            
      J   	 t         j                  dk7  rt        ddi      dfS t        j                  rkt        j
                         } | j                  d      }| j                  dd      }| j                  d      }| j                  d	      }| j                  d
      }nt        j                  j                  d      }t        j                  j                  dd      }t        j                  j                  d	      }t        j                  j                  d
      }d}dt        j                  v rMddl	m
} t        j                  d   }|j                  r(|j                  |d      }|r|j                  d      nd}|st        ddi      dfS |st        ddi      dfS t        j                  j                  t        j                   j#                  t$        j&                              j)                  t         j*                        j-                         xs d}	t%        t         j*                  |dd |r|dd nd||r|dd nd|rt/        |      nd|	dz         }
t        j                  j1                  |
       t        j                  j3                          t        d|
j5                         d      dfS # t6        $ rd}t        j                  j9                          t:        j=                  dt?        |              t        dd t?        |       i      d!fcY d}~S d}~ww xY w)"zUpload a new portfolio itemworkerr   z'Only workers can upload portfolio items  titledescription 	image_urltrade_categorycontract_idNimager	   )file_storage_service	portfolio)folderurlzTitle is requiredi  zImage is requiredr   r   r   i  d   r   )r   r,   r-   r/   r0   r1   r   z!Portfolio item added successfullymessager$      z Error uploading portfolio item: zFailed to upload: r   ) r   roler   r   is_jsonget_jsongetformfilesservices.file_storage_servicer3   filenameupload_filer   sessionr   funcmaxr
   r   r   idscalarintaddcommitr   r    rollbackr!   r   r"   )datar,   r-   r/   r0   r1   r3   fileresult	max_orderr$   r%   s               r&   upload_portfolio_itemrQ   #   s   9F(G%NOPRUUU ??##%DHHW%E((="5K-I!XX&67N((=1KLL$$W-E!,,**="=K$\\--.>?N!,,**=9KI '--'Q}}W-==1==d;=WF5;

5 1IG%89:C??G%89:C?? JJ$$RWW[[1L1L%MNYY1&&(@>? 	 "oo+.9ET*t3A>$3/t,7K(T#a-
 	

t


:LLN
   	
  F


7Ax@A#5c!fX!>?@#EEFs1   !J5 E)J5 J5 DJ5 5	L">ALL"L"z/<int:item_id>DELETEc                    	 t         j                  j                  |       }|st        ddi      dfS |j                  t
        j                  k7  rt        ddi      dfS t        j                  j                  |       t        j                  j                          t        ddi      dfS # t        $ rX}t        j                  j                          t        j                  d	t        |              t        dd
i      dfcY d}~S d}~ww xY w)zDelete a portfolio itemr   Item not found  z"Not authorized to delete this itemr+   r9   zPortfolio item deletedr   zError deleting portfolio item: zFailed to delete itemr   N)r
   r   r>   r   r   r   rG   r   rD   deleterK   r    rL   r!   r   r"   )item_idr$   r%   s      r&   delete_portfolio_itemrX   c   s    @""&&w/G%567<<>>\__,G%IJKSPP


$


	#;<=sBB @


6s1vh?@!89:C??@s*   /B* +B* AB* *	D3AD DDz/<int:item_id>/reorderPUTc                 &   	 t         j                  j                  |       }|st        ddi      dfS |j                  t
        j                  k7  rt        ddi      dfS t        j                         }|j                  dd      }t        |      |_
        t        j                  j                          t        d|j                         d	      d
fS # t        $ r7}t        j                  j!                          t        ddi      dfcY d}~S d}~ww xY w)z(Change display order of a portfolio itemr   rT   rU   zNot authorizedr+   r   r   zOrder updatedr8   r   zFailed to reorderr   N)r
   r   r>   r   r   r   rG   r   r=   rI   r   r   rD   rK   r   r    rL   )rW   r$   rM   	new_orderr%   s        r&   reorder_portfolio_itemr\   z   s    <""&&w/G%567<<>>\__,G%567<<!HH_a0	 ^


&LLN
   	
  <


!456;;<s)   /C +C A1C 	D,DDD)__doc__flaskr   r   flask_loginr   r   loggingr.   r   models.portfolior
   
extensionsr   	getLogger__name__r!   router'   rQ   rX   r\        r&   <module>rh      s    # 4   - 			8	$ $ug6B 7B$ Ix0;F  1;F| $xj9@  :@* ,ug><  ?<rg   