
    Pj0                        d dl Z d dlZd dlmZmZ d dl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 d dlmZmZ d dlmZ d dlmZ  e       Z ej:                  e      Zi a da!da"da#i a$da% e jL                         Z' G d de      Z(de)fdZ*ejW                  ddgee(   dd       e	dd      fde,dee(   fd       Z-y)    N)text	bindparam)	BaseModel)	APIRouterPath)datetime)ZoneInfo)ResponseWrapper)HTTPException)get_async_db)predict_30_days_data)#adjust_predictions_with_competitorsget_competitors_prices)apply_events)apply_holidaysc                   ,    e Zd ZU eed<   eed<   eed<   y)PricingRequestpricesroomscompetitorsN)__name__
__module____qualname__dict__annotations__     @/var/www/html/ls-ibe-bot-apis-staging/app/controllers/pricing.pyr   r   #   s    LKr   r   keysc                   K   | si S t               4 d {   }t        d      j                  t        dd            }|j	                  |dt        |       i       d {   }|j                         }|D ci c]  }|j                  |j                   c}cd d d       d {    S 7 7 Lc c}w 7 # 1 d {  7  sw Y   y xY ww)Nz}
            SELECT product_id, product_name, type_id
            FROM `products`
            WHERE type_id IN :keys
        r   T)	expanding)	r   r   
bindparamsr   executelistfetchalltype_idproduct_name)r   dbqueryresultr   rooms         r   fetch_roomsr,   (   s     	~~   Z	&D9:	 	
 zz%&$t*)=>>!=BCUTt000UC ~~ ?C ~~~si   C
B*C
AB5B, B58B.B5C
$B3%C
,B5.B53C
5C;B><CC
z/pricing/{sub_hotel_id}PricingzPredict pricing for 30 days.   )tagsresponse_modelsummarystatus_code.z.The ID of the sub-hotel to predict pricing for)descriptionsub_hotel_idreturnc           	      (  K   t         j                  d|         | st        dd      t        j                  t        d            j                         }t        4 d {    t        |k7  ri a	|ai a
|at        |k7  rd a|at        j                  |       }|	 t        |        d {   }|t        | <   t        	 t%        d       d {   at        }d d d       d {    t'               d {   }t)        |       d {   }t+        |j-                               }t/        t1        |            }t        4 d {    t        j                  |      }d d d       d {    ;t3        |       d {   }t        4 d {    |t        |<   d d d       d {    t5        ddt7        ||            S 7 f7  # t         $ r/}t         j#                  d|  d| d	       t        d
d      d }~ww xY w7 :# t         $ r'}t         j#                  d| d	       i aY d }~cd }~ww xY w7 Z# 1 d {  7  sw Y   kxY w7 `7 P7 7 # 1 d {  7  sw Y   xY w7 7 7 # 1 d {  7  sw Y   xY ww)NzStarted GET /pricing/i  zSub-hotel ID is required)r2   detailzAmerica/New_Yorkz&ML prediction failed for sub_hotel_id=z: T)exc_infoi  z0Price prediction failed. Please try again later.   )dayszCompetitor price fetch failed: OK)r   r   r   )statusmessagedata)loggerinfor   r   nowr	   date_cache_lock_cache_date_cache_rooms_cache_rooms_cache_date_competitors_cache_date_competitors_cachegetr   	Exceptionerrorr   r   r   r$   r   tuplesortedr,   r
   r   )r4   todayr*   er   r   	cache_keyr   s           r   predict_pricingrR   6   s=     KK'~674NOO LL"456;;=E{%FKL %"e+!%&+# L)>p3LAA $*F<  %(+Aq+I%I"
 )? {N "&))F''F DfTl#I{  + { }!$'';&+L# ; $>QW_dr};~o " B pEl^SUVWUXYdhi#<noop &J (>qcBTR%'"(7 {{{N *' {{{{ (;;;;st  AJ G!J$6I G)G	*G.I >H
HH
I J#H=$J6I7J	I
;JIJ	I!J*I+J?I7 JI9J
I=J'I;(J	G	H*G??HI H

	H:H5/I 5H::I =J II	I	JJJJ!I4'I*(I4/	J9J;J=JJJJ).asynciologging
sqlalchemyr   r   pydanticr   fastapir   r   r   zoneinfor	   app.schemasr
   app.exceptionsr   app.models.connectionr   app.services.predict_pricer   app.utils.competitors_pricesr   r   app.utils.eventsr   app.utils.holidaysr   router	getLoggerr   r?   rE   rD   rI   rH   rF   rG   LockrC   r   r$   r,   rJ   intrR   r   r   r   <module>rd      s      &  #   ' ( . ; d ) -				8	$ 
   gllnY 
DD D 
">2*   /33Dt.u B@ B@  {J  KY  {Z B@B@r   