
    i                     $   d Z ddl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 ddlmZmZmZmZmZ ddlmZ d	eez  d
efdZ e       Zej5                  de      dd ee	       ee      fdedededed
ef
d       Zej=                  deej>                         ee	       ee      fdededed
efd       Z ej5                  de       ee	       ee      fdededed
efd       Z!ejE                  de       ee	       ee      fdedededed
ef
d       Z#ej5                  de       ee	       ee      fdededed
efd       Z$ej=                  deej>                         ee	       ee      fdedededed
ef
d       Z%y)uQ   Products router — endpoints for the global product catalogue and price history.    )	APIRouterDependsHTTPExceptionstatus)AsyncSession)get_db)get_current_user)User)ProdukCreateProdukHargaCreateProdukHargaResponseProdukResponseProdukUpdate)product_serviceereturnc                     t        | t              r$t        t        j                  t        |             S t        t        j                  t        |             S )uE   Convert service-layer ValueError → 404 and PermissionError → 403.status_codedetail)
isinstancePermissionErrorr   r   HTTP_403_FORBIDDENstrHTTP_404_NOT_FOUND)r   s    6/var/www/html/spbu.com/backend/app/routers/products.py_service_errorr      s:    !_%)B)B3q6RRV%>%>s1vNN     )response_model2   skiplimitdbcurrent_userc                 p   K   t        j                  || |       d{   \  }}||| |z  dz   |ddS 7 w)zBReturn a paginated list of all products with their current prices.N   )totalpageper_page)datameta)r   list_products)r"   r#   r$   r%   productsr(   s         r   r-   r-      sI      ,99"dEJJOHe):N  Ks   646)r    r   r+   c                    K   t        j                  ||        d{   }|j                  |j                  |j                  dddS 7 +w)zOCreate a new product in the global catalogue, optionally with an initial price.N)idnamakodezProduk berhasil dibuatr+   message)r   create_productr0   r1   r2   )r+   r$   r%   produks       r   r5   r5   &   sA      #11"d;;F!99fkk6;;O\tuu <s   A
A,A
z/{produk_id}	produk_idc                    K   	 t        j                  ||        d{   }dt        j                  |      iS 7 # t        $ r)}t        t        j
                  t        |            d}~ww xY ww)zEReturn details for a single product including its full price history.Nr   r+   )	r   get_product
ValueErrorr   r   r   r   r   model_validate)r7   r$   r%   r6   r   s        r   r9   r9   1   sg     R&222yAA N11&9:: B R(A(A#a&QQRs1   A0; 9; A0; 	A-$A((A--A0c                    K   	 t        j                  || |       d{   }t        j                  |      ddS 7 # t        $ r)}t        t        j
                  t        |            d}~ww xY ww)z"Update scalar fields on a product.Nr   zProduk berhasil diupdater3   )	r   update_productr:   r   r   r   r   r   r;   )r7   r+   r$   r%   r6   r   s         r   r=   r=   ?   sj     R&55b)TJJ #11&9F`aa K R(A(A#a&QQR1   A2= ;= A2= 	A/$A**A//A2z/{produk_id}/hargac                 
  K   	 t        j                  ||        d{   }d|D cg c]  }t        j                  |       c}iS 7 )# t        $ r)}t        t        j
                  t        |            d}~ww xY wc c}w w)z:Return the full price history for a product, newest first.Nr   r+   )	r   get_harga_historyr:   r   r   r   r   r   r;   )r7   r$   r%   historyr   hs         r   r@   r@   N   sz     R'99"iHH GLGq(77:GLMM I R(A(A#a&QQRLsB   BA	 AA	 BA>BA	 		A;$A66A;;Bc                    K   	 t        j                  || |       d{   }t        j                  |      ddS 7 # t        $ r)}t        t        j
                  t        |            d}~ww xY ww)zUAdd a new price entry for a product, automatically closing the previous active price.Nr   zHarga berhasil ditambahkanr3   )	r   	add_hargar:   r   r   r   r   r   r;   )r7   r+   r$   r%   hargar   s         r   rD   rD   \   sj     R%//ItDD (66u=Jfgg E R(A(A#a&QQRr>   N)&__doc__fastapir   r   r   r   sqlalchemy.ext.asyncior   app.core.databaser   app.dependenciesr	   app.models.userr
   app.schemas.productr   r   r   r   r   app.servicesr   r:   r   r   routergetdictintr-   postHTTP_201_CREATEDr5   r9   patchr=   r@   rD    r   r   <module>rV      s   W = = / $ -   r r (Oj?2 O} O 
 Bt$v !12	
 	 	
 
 % R&2I2IJ v !12v
vv v 
	v Kv N40 v !12
;
;
; 
; 
	
; 1
; nT2 v !12	bb
b 	b 	b
 
b 3b  6 v !12
N
N
N 
N 
	
N 7
N !$FD[D[\ v !12	hh
h 	h 	h
 
h ]hr   