
    FiE                     l   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 d dlmZ d dlmZ d dlmZ d dlmZ  ed	d
g          Z e            Z ee          fdefdZe                    dd           ee          fdedefd            Ze                    dd           ee          fdedefd            Ze                    dd           ee          fdefd            Ze                    d          defd            Ze                    d          defd            Z dS )    )	APIRouterDependsHTTPExceptionPathstatus)HTTPAuthorizationCredentials
HTTPBearer)List)ObjectId)datetime)
verify_jwt)get_col)ProductVariantz/product-variantszProduct Variants)prefixtagscredentialsc                     | j         }t          |          \  }}|r|st          t          j        d          |                    d          dk    rt          t          j        d          |S )NzInvalid tokenstatus_codedetailroleadminzAdmin access required)r   r   r   r   HTTP_401_UNAUTHORIZEDgetHTTP_403_FORBIDDEN)r   tokenokpayloads       ,D:\Nbitz\app\routers\productVariantRouter.pyadmin_requiredr       s    #EU##KB 
W 
4"
 
 
 	

 {{6g%%1*
 
 
 	
 N    z/create-variant/{product_id}   )r   
product_idvariantc                   K   t          d          }t          |           }|                    d|i          }|st          t          j        d          t          d          }t          j                    }|                                }||d<   ||d<   ||d<   d	|vrd
|d	<   d|vr|	                    dd
          |d<   |
                    |          }	ddt          |	j                  dS )Nproducts_idzProduct not foundr   product_variantsproduct	createdAt	updatedAt
total_soldr   total_stockstockTzVariant created)successmessage
variant_id)r   r   find_oner   r   HTTP_404_NOT_FOUNDr   utcnowdictr   
insert_onestrinserted_id)
r#   r$   userproducts_colproduct_oidr)   colnownew_variantresults
             r   create_variantr@   '   s      :&&L:&&K##UK$899G _(AJ]^^^^
$
%
%C
/

C,,..K(K	"K"K ;&&$%L!K''%0__Wa%@%@M"^^K((F $&,--  r!   z/update-variant/{variant_id}   r1   c                 >  K   t          d          }d |                                                                D             }t          j                    |d<   |                    dt          |           id|i          }|j        dk    rt          dd          d	d
dS )Nr(   c                     i | ]
\  }}|||S N ).0kvs      r   
<dictcomp>z"update_variant.<locals>.<dictcomp>V   s    LLLDAqam1ammmr!   r+   r'   z$setr     Variant not foundTzVariant updatedr/   r0   )	r   r5   itemsr   r4   
update_oner   matched_countr   )r1   r$   r9   r<   update_datar?   s         r   update_variantrQ   N   s       $
%
%CLLGLLNN$8$8$:$:LLLK'00K^^	$$%	 F
 q  C!4555(9:::r!   z/delete-variant/{variant_id}c                    K   t          d          }|                    dt          |           i          }|j        dk    rt	          dd          dddS )	Nr(   r'   r   rJ   rK   TzVariant deletedrL   )r   
delete_oner   deleted_countr   )r1   r9   r<   r?   s       r   delete_variantrU   g   sb      
 $
%
%C^^UHZ$8$89::Fq  C!4555(9:::r!   z/product/{product_id}c                    K   t          d          }|                    dt          |           i          }d fd|D             }|S )Nr(   r)   c                    d }t          | d                   t          | d                   |                     d          |                     d          |                     d          |                     d          |                     d          |                     d	          |                     d
          |                     d          |                     dd          |                     d          |                     d           ||                     d                     ||                     d                    dS )Nc                 X    t          | t                    r|                                 S | S rD   
isinstancer   	isoformatvalues    r   serialize_datetimezNget_variants_by_product.<locals>.serialize_variant.<locals>.serialize_datetime   s)    %** )(((Lr!   r'   r)   variant_Typevariant_Valuespriceoffer_priceoffer_percentageskur.   r-   r,   r   variant_urlschema_markupr*   r+   id	productIdr_   r`   ra   rb   rc   rd   r.   r-   r,   re   rf   r*   r+   )r7   r   )rH   r^   s     r   serialize_variantz2get_variants_by_product.<locals>.serialize_variant   s   	 	 	 ah--Qy\**EE.11ee$455UU7^^55// !&8 9 955<<UU7^^55//%%a0055//UU?33++AEE+,>,>??++AEE+,>,>??
 
 	
r!   c                 &    g | ]} |          S rE   rE   )rF   rH   rj   s     r   
<listcomp>z+get_variants_by_product.<locals>.<listcomp>   s%    >>>!!!$$>>>r!   )r   findr   )r#   r<   variants_cursorvariantsrj   s       @r   get_variants_by_productrp   y   sb      
$
%
%Chh	8J+?+?@AAO
 
 
0 ?>>>o>>>HOr!   z/single/{variant_id}c                 0  K   t          d          }|                    dt          |           i          }|st          t          j        d          d }t          |d                   t          |d                   |                    d          |                    d          |                    d	          |                    d
          |                    d          |                    d          |                    d          |                    d          |                    dd          |                    d          |                    d           ||                    d                     ||                    d                    dS )Nr(   r'   rK   r   c                 X    t          | t                    r|                                 S | S rD   rY   r\   s    r   r^   z+get_one_variant.<locals>.serialize_datetime   s)    eX&& 	%??$$$r!   r)   r_   r`   ra   rb   rc   rd   r.   r-   r,   r   re   rf   r*   r+   rg   )r   r2   r   r   r   r3   r7   r   )r1   r<   r$   r^   s       r   get_one_variantrs      sn     
$
%
%CllE8J#7#7899G _(AJ]^^^^   '%.!!+,,N33!++&677W%%{{=11#KK(:;;{{5!!W%%{{=11kk,22{{=11 _55''K(@(@AA''K(@(@AA  r!   N)!fastapir   r   r   r   r   fastapi.securityr   r	   typingr
   bsonr   r   app.utility.securityr   	app.db.dbr   app.models.productVarientr   routersecurityr    postr7   r@   putrQ   deleterU   r   rp   rs   rE   r!   r   <module>r      sz   C C C C C C C C C C C C C C E E E E E E E E                   + + + + + +       4 4 4 4 4 4	-5G4H	I	I	I:<< @Gwx?P?P   <    * +== 
	 	           >= L *<< 
	 	 ; ;;; ; ; =<;0 -3?? 
	 	 ; ;; ; ; @?;" #$$c    %$J "##c    $#  r!   