
    6i              
       0   d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
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 d
Z ej8                  e      Z e       ZejA                  de	ejB                            ed d d       edddd       ee      fde"de"defd       Z#ejA                  de	ejH                            ee      fdefd       Z%ejA                  de	ejL                            ee      fdefd       Z'ejA                  de	ejP                            ee      fdefd       Z)ejA                  de	ejL                            ee      fd e"defd!       Z*ejA                  d"e	ejV                            ee      fd e"defd#       Z,ejA                  d$e	ejZ                            ed d d%       edddd&       ee      fde"de"defd'       Z.ejA                  d(       ee      fdefd)       Z/eja                  d*ejb                         ed+d,-       eddd.       ed/ddd0       eddd1d2      fd3e"d4e"d5e"d6e"fd7       Z2y# e$ r
 d dlmZ Y <w xY w# e$ rZ ede        dZdZdZY dZ[MdZ[ww xY w)8    )	APIRouterDependsHTTPExceptionBackgroundTasksQuery)Session)ListOptionalDictAny   )schemas
controllerN)get_db)product_fetch)
celery_appTz-Warning: Could not import Celery components: Fz	/products)response_modelzNumber of products to skip)gedescriptiond   i  zNumber of products to return)r   ler   skiplimitdbc                     	 t        j                  || |      }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)zGet products with paginationr   r   zError fetching products:   zError fetching productsstatus_codedetailN)r   get_products	Exceptionloggererrorstrr   )r   r   r   productses        G/var/www/html/hubwallet-dev/src/smart_inventory/apps/products/router.pyr!   r!      sY    O**2DF O0Q9:4MNNO    	A.AAz
/locationsc                     	 t        j                  |       }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)zGet all locationszError fetching locations: r   zError fetching locationsr   N)r   get_locationsr"   r#   r$   r%   r   )r   	locationsr'   s      r(   r+   r+   -   sV    P,,R0	 P1#a&:;4NOOP    	A.AAz/vendorsc                     	 t        j                  |       }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)zGet all vendorszError fetching vendors: r   zError fetching vendorsr   N)r   get_vendorsr"   r#   r$   r%   r   )r   vendorsr'   s      r(   r/   r/   8   sU    N((, N/Ax894LMMNr-   z/categoriesc                     	 t        j                  |       }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)zGet all categorieszError fetching categories: r   zError fetching categoriesr   N)r   get_categoriesr"   r#   r$   r%   r   )r   
categoriesr'   s      r(   r2   r2   C   sV    Q..r2
 Q23q6(;<4OPPQr-   z/products/{product_id}/vendors
product_idc                     	 t        j                  ||       }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)zCGet vendors for a specific product with detailed vendor informationz Error fetching product vendors: r   zError fetching product vendorsr   N)r   get_product_vendorsr"   r#   r$   r%   r   )r4   r   product_vendorsr'   s       r(   r6   r6   N   sX    V$88ZH V7Ax@A4TUUV    	A.AAz /products/{product_id}/locationsc                     	 t        j                  ||       }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)z$Get locations for a specific productz"Error fetching product locations: r   z Error fetching product locationsr   N)r   get_product_locationsr"   r#   r$   r%   r   )r4   r   product_locationsr'   s       r(   r:   r:   Y   sY    X&<<RL   X9#a&BC4VWWXr8   z/products/priceszNumber of prices to skipzNumber of prices to returnc                     	 t        j                  || |      }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)z:Get all product prices (across all products and locations)r   zError fetching all prices: r   zError fetching all pricesr   N)r   get_all_pricesr"   r#   r$   r%   r   )r   r   r   pricesr'   s        r(   r=   r=   d   sY    Q**2DF Q23q6(;<4OPPQr)   z/statisticsc                     	 t        j                  |       }|S # t        $ r3}t        j	                  dt        |              t        dd      d}~ww xY w)zGet product statisticszError fetching statistics: r   zError fetching statisticsr   N)r   get_product_statisticsr"   r#   r$   r%   r   )r   statsr'   s      r(   get_statisticsrB   s   sU    Q11"5 Q23q6(;<4OPPQr-   z/celery/fetch   z
Company ID)r   zStarting page number
   zItems per page2   zTotal pages to fetch
company_idpage_number	page_sizetotal_pagesc                 n   t         st        dd      	 t        j                  | |||      }|dk(  rdnd}d| d	|  }|dk(  r	|d
| z  }n	|d| dz  }t	        j
                  |j                  d|      S # t        $ r3}t        j                  dt        |              t        dd      d}~ww xY w)z4Trigger product fetch from external API using Celeryi  zECelery not available. Product fetch service is currently unavailable.r   )rF   rG   rH   rI   r   zsingle pagebulkzProduct fetch task started (z): company z, page z, z pagesstarted)task_idstatusmessagez#Error starting product fetch task: r   z!Error starting product fetch taskN)celery_availabler   r   delayr   
TaskResultidr"   r#   r$   r%   )rF   rG   rH   rI   task
fetch_typerO   r'   s           r(   trigger_product_fetchrV      s     Z
 	

Y""!##	
 '2Q&6]F
0K
|T!..GK=//G!!GG
 	
  Y:3q6(CD4WXXYs   A"A8 8	B4.B//B4)3fastapir   r   r   r   r   sqlalchemy.ormr   typingr	   r
   r   r    r   r   loggingsrc.utils.dbr   ImportErrorutils.db-src.smart_inventory.tasks.products_fetch_taskr   src.utils.celery_workerr   rP   r'   print	getLogger__name__r#   routerget
ProductOutintr!   LocationOutr+   	VendorOutr/   CategoryOutr2   r6   ProductLocationOutr:   ProductPriceOutr=   rB   postrR   rV        r(   <module>rp      ss   M M " , , !  #
K2 
		8	$	 KW-?-?(@AaA+GHsqT7UV&/O
OO 	O BO Lg.A.A)BC ' Pg P DP JtG,=,='>?%fo NG N @N M$w/B/B*CD!( Qw Q EQ ,T'BSBS=TU7>v VC VW V VV .tGD^D^?_`9@ Xc Xw X aX tG4K4K/LMaA+EFsqT7ST&/Q
QQ 	Q NQ M!( Qw Q Q _W-?-?@A<8Q12HI2!9IJQ19OP	%Y%Y%Y %Y 	%Y A%Yo      	9!
=>MJ	s(   I" I4 "I10I14J9JJ