
    93i                        d dl mZ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  eddg          Z G d	 d
e          Z G d de          Ze                    dee         ej                   edd           edd           eddd           edd          fdedededee         fd            Ze                    dd           edd           ed dd!          fdedefd"            Zd#S )$    )ListOptional)	APIRouterQuerystatus)	BaseModel)ObjectId)get_colz/searchsearch)prefixtagsc                   \    e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<   dS )VariantItem
variant_idskupriceoffer_priceN)__name__
__module____qualname__str__annotations__r   float     2D:\Nbitz\nbitez_python\app\routers\searchRouter.pyr   r   
   sK         OOO	#E?%     r   r   c                       e Zd ZU eed<   eed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   eee                  ed<   d	S )
SearchResponseItem
product_idnameurlimagedescriptioncategorysub_categoryvariantsN)r   r   r   r   r   r   r   r   r   r   r   r   r      s         OOO
III	#C=#sm3-tK())))))r   r   /)response_modelstatus_code.   )
min_length)ge
      )r,   lenewestz@Sort options: newest, price_low, price_high, name_asc, name_desc)r#   querypagelimitsortc                    t          d          }t          d          }t          d          }|dz
  |z  }| dd}t          |                    d|i                    }	d |	D             }
t          |                    d	d
|id|igiddi                    }d |D             }d	d|id|idd|
iidd|
iid|idd|
iidd|iigi}dddddd                    |d          }|\  }}t          |                    |                              ||                              |                              |                    }g }|D ]}t          |                    d|d         idddd                    }d |D             }d }d|v rOt          |d         t                    r4|	                    d|d         i          }|r|                    d          }d }d|v rOt          |d         t                    r4|	                    d|d         i          }|r|                    d          }|
                    t          t          |d                   |                    d          |                    d          |                    d          |                    d          |                    d          |||	  	                   |S ) Nproducts
categoriesproductvariantsr*   iz$regexz$optionscategory_namec                     g | ]
}|d          S )_idr   ).0cats     r   
<listcomp>z#search_products.<locals>.<listcomp>3   s    EEE3CJEEEr   z$orvariant_namer   r   c                     g | ]
}|d          S )r   r   )r>   vms     r   r@   z#search_products.<locals>.<listcomp>A   s    FFF2l+FFFr   r    r#   r$   z$inr%   typer=   )	createdAt)	min_pricer*   )rG   rF   )r    r*   )r    rF   )r0   	price_low
price_highname_asc	name_desc)r   r   r   c           
          g | ]a}t          t          |d                    |                    d          |                    d          |                    d                    bS )r=   r   r   r   )r   r   r   r   )r   r   get)r>   vs     r   r@   z#search_products.<locals>.<listcomp>o   so     
 
 
  qx==EE%LLeeGnnEE-00	  
 
 
r   product_urlr"   )	r   r    r!   r"   rD   r#   r$   r%   r&   )r
   listfindrM   r4   skipr3   
isinstancer	   find_oneappendr   r   )r1   r2   r3   r4   products_colcategories_colvariants_colrR   regexmatched_categoriesmatched_category_idsvariant_matchesvariant_product_idssearch_filtersort_option
sort_field
sort_orderproduct_docsresultsdocr&   variant_itemsr;   r?   sub_category_namesub_cats                             r   search_productsrh      s    :&&L\**N,--L1HD #..E n11?E2JKKLLEE2DEEE #U+EN 1	
 	

 
O GFoFFF 	UOE"%!567e%9:;UOe%9:;U/01

M $%'!  
c$!""  )J
 -((	j*	%	%	d	u	 L G .
 .
s5z*Aa88 
 

 
 
 
 
 C
OX!F!F ))5#j/*BCCC 9 # 8 8 !S  ZN0CX%N%N $--uc.6I.JKKG A$+KK$@$@!s5z??WWV__GGM**ggg&&WWV__GGM22&.&
 
 
	
 	
 	
 	
 Nr   z/suggestions)r)         c                     t          d          }d|  dd}|                    d|iddi                              dd                              |          }d |D             S )Nr6   ^r9   r:   r    r*   c                     g | ]
}|d          S )r    r   )r>   ss     r   r@   z&search_suggestions.<locals>.<listcomp>   s    +++!AfI+++r   )r
   rQ   r4   r3   )r1   r3   rV   rY   suggestionss        r   search_suggestionsrp      st    
 :&&L"5{{44E 	65/FA;77	fa	u  ,+{++++r   N)typingr   r   fastapir   r   r   pydanticr   bsonr	   	app.db.dbr
   routerr   r   rM   HTTP_200_OKr   intrh   rp   r   r   r   <module>ry      s   ! ! ! ! ! ! ! ! , , , , , , , , , ,                  	)8*	5	5	5! ! ! ! !) ! ! !* * * * * * * * C%7 8fFXYYsq)))aAraC(((%V  	v vv
v v 3-	v v v ZYvp N,,sq)))qQ2&&&, ,,, , , -,, , ,r   