
    Ci                         d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ  e j$                  e      ZdZ G d	 d
      Zy)    N)datetimetimezone	timedelta)Session)SyncControlSyncJob)MlOrderMlOrderItem)MeliApiService)InitialLoadService2   c                   2    e Zd ZdefdZd Zd ZddefdZy)	IncrementalSyncServicedbc                 j    || _         t        |      | _        t        || j                        | _        y )N)meli_client)r   r   ml_apir   loader)selfr   s     N/var/www/hypershopcomercio.com.br/hyper-ai/app/services/sync_v2/incremental.py__init__zIncrementalSyncService.__init__   s'    $R((E    c                 6    | j                   j                         S N)r   _get_seller_id)r   s    r   r   z%IncrementalSyncService._get_seller_id   s    {{))++r   c                    	 ddl m} |j                  dg       }|r|d   ni }|j                  di       j                  dd      } |d|dt        j                  t
        j                        j                         d	       t        j                  d
|        y # t        $ r"}t        j                  d|        Y d }~y d }~ww xY w)Nr   )broadcast_eventorder_itemsitemtitlezNovo Pedidoorder_updatecreated)r    status	timestampu.   [Incremental] 🎉 SSE Notification sent for: z"[Incremental] Failed to emit SSE: )app.api.endpoints.sser   getr   nowr   utc	isoformatloggerinfo	Exceptionwarning)r   
order_datar   r   firstr    es          r   _emit_sale_eventz'IncrementalSyncService._emit_sale_event   s    	E=$..;K&1KNrEIIfb)--g}EEN#%\\(,,7AAC- 
 KKHPQ 	ENN?sCDD	Es   BB 	C#C  CNlookback_hoursc                 v
   d}| j                         }|sy | j                  j                  t              j	                  t        j
                  |k(        j                         }|s't        |      }| j                  j                  |       t        j                  t        j                        }|j                  }|r,|j                   |j                  t        j                        }|rQ|t        |      z
  }|r||k  r|}t         j#                  d| d| d       nt         j#                  d| d	| d       |s|t        d
      z
  }|t        d      z
  }|j%                         }	|j%                         }
t'        |dd||      }| j                  j                  |       | j                  j)                          t         j#                  d|	        	 d}d}d}d}d}d}|r||	|
|t*        d}| j,                  j/                  dd|      }|j0                  dk7  r%t3        d|j0                   d|j4                         |j7                         }|j9                  dg       }|j9                  di       }|j9                  dd      }|sd}n|D ]  }	 t;        j<                  d       | j,                  j/                  dd|d           }|j0                  dk(  rM|j7                         }| j>                  jA                  |      }|d!k(  r|d"z  }| jC                  |       n|d"z  }n|d"z  }|d"z  }|d$z  dk(  st         j#                  d%| d&        | j                  j)                          |tG        |      z  }||k\  rd}|r||_        ||_$        d'|_%        ||_&        ||_'        ||_(        ||_)        t        j                  t        j                        |_*        | j                  j)                          t         j#                  d(|        y # t2        $ r.}t         jE                  d#|d     d|        |d"z  }Y d }~d }~ww xY w# t2        $ r}t         jE                  d)|        | j                  jW                          |r|jX                  r|| j                  j                  t&              j9                  |jX                        }|rBd*|_%        t[        |      d d+ |_.        t        j                  t        j                        |_*        | j                  j)                          |d }~ww xY w),Norders)entity)tzinfo)hoursz1[Incremental] Smart Lookback: Extending start to z	 (Forced zh)z&[Incremental] Smart Lookback: Keeping z (Older than forced 0      )minutesincrementalrunning)r5   job_typer#   	date_fromdate_toz"[Incremental] Syncing orders from r   T)sellerzorder.date_last_updated.fromzorder.date_last_updated.tooffsetlimitGETz/orders/search)params   z
API Error z: resultspagingtotalFg      ?z/orders/idr"      zError upserting order r   z[Incremental] Progress: z orders processed...	completedz*[Incremental] Orders Finished. Processed: z[Incremental] Failed: failedi  )/r   r   queryr   filterr5   r/   addr   r'   r   r(   last_incremental_syncr6   replacer   r*   r+   r)   r   commit
BATCH_SIZEr   requeststatus_coder,   textjsonr&   timesleepr   _upsert_orderr1   errorlenlast_incremental_countr#   records_foundrecords_createdrecords_updatedrecords_failedfinished_atrollbackrI   strerror_message)r   r2   ENTITY	seller_idcontrolr'   	last_syncforce_startdate_from_dtr>   r?   jobtotal_processedr"   updatedrL   rA   has_morerD   respdatar4   rG   rH   r.   detail_resp
full_orderresr0   s                                r   sync_orders_incrementalz.IncrementalSyncService.sync_orders_incremental)   s   '')	&''--,33K4F4F&4PQWWY!0GGGKK  ll8<<( 11	 ))1!)))>I 	 ??Ki 7'	OPY{ZcdrcssuvwEi[Pdesdttvwxib11I !9Q#77 **,	--/VmI ,c;C8DEX	OGGF FH'4=29$' {{**52B6*R##s*#j1A1A0B"TYYK$PQQyy{)R0(B/

7A.$H"( fJ$ 

3&*kk&9&9%8JW[L\K]A^&_&22c9)4)9)9);J"&++";";J"GC"i/ '1 $ 5 5j A")Q,'"aKF
 $q(O '+q0&>>OOc$de1f4  #f+%U?$Hg l -0G)-<G*$CJ /C")C")C!'C&ll8<<8COGGNNKKD_DUVW7 % $'=j>N=OrRSQT%UV!$:  	LL1!56GGsvvww}}W-11#&&9"*SZ),QS&'/||HLL'AS_GGNNG	sS   B=Q BP0Q >AQ BQ 	Q!#Q
Q 
QQ 	T8CT33T8r   )	__name__
__module____qualname__r   r   r   r1   intru    r   r   r   r      s)    F7 F,E Fc Fr   r   )loggingrX   rW   r   r   r   sqlalchemy.ormr   app.models.syncr   r   app.models.ml_orderr	   r
   app.services.meli_apir   !app.services.sync_v2.initial_loadr   	getLoggerrv   r*   rS   r   rz   r   r   <module>r      sF       2 2 " 0 4 0 @			8	$
` `r   