
    Z0jNV                         d dl Z 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mZ d dl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)Session)SyncControlSyncJob)MlOrderMlOrderItem)Ad)AdVariation)MeliApiService2   c                       e Zd ZddefdZd Zd ZdefdZde	d	e
fd
ZdefdZd ZdefdZdefdZdede
fdZde
fdZy)InitialLoadServiceNdbc                 @    || _         || _        t        |      | _        y N)r   meli_clientr   ml_api)selfr   r   s      O/var/www/hypershopcomercio.com.br/hyper-ai/app/services/sync_v2/initial_load.py__init__zInitialLoadService.__init__   s    &$R(    c                     ddl m} | j                  j                  |      j	                  |j
                  dk(        j                         }|r|j                  S d S )Nr   )
OAuthTokenmercadolivre)app.models.oauth_tokenr   r   queryfilterproviderfirstuser_id)r   r   tokens      r   _get_seller_idz!InitialLoadService._get_seller_id   sG    5j)001D1D1VW]]_ %u}}/4/r   c                    d}| j                         }|st        j                  d       y | j                  j	                  t
              j                  t
        j                  |k(        j                         }|sAt        |      }| j                  j                  |       | j                  j                          |j                  dk(  ru|j                  rSt        j                  t        j                         |j                  z
  j"                  dkD  rt        j%                  d       nt        j%                  d       y |j&                  xs i }|j)                  dd	      }|j)                  d
d	      }d|_        |j*                  xs# t        j                  t        j                         |_        | j                  j                          t-        |ddt        dddt        j                         t        j                  t        j                               }| j                  j                  |       | j                  j                          	 d}t        j                  t        j                         j/                         }	d}
d	}d	}d	}|
rt        j1                  d| d       |||	d|t2        d}| j4                  j7                  dd|      }|j8                  dk7  r%t;        d|j8                   d|j<                         |j?                         }|j)                  dg       }|j)                  di       }|j)                  dd	      }|sd}
n|D ]p  }	 | j4                  j7                  dd |d!          }|j8                  dk(  r2|j?                         }| jA                  |      }|d"k(  r|dz  }n|dz  }n|dz  }|dz  }r | j                  j                          |tC        |      z  }||d$|_        ||_"        ||_#        | j                  j                          tI        jJ                  d%       ||k\  rd}
|
rd&|_        t        j                  t        j                         |_&        d&|_'        ||_(        ||_)        ||_*        ||_+        t        j                  t        j                         |_,        | j                  j                          t        j1                  d'|        | j                  j                          t        j1                  d'|        y # t:        $ r.}t        j                  d#|d!    d|        |dz  }Y d }~d }~ww xY w# t:        $ r}t        j                  d(|        | j                  j[                          	 d)t]               v rO|rM|j^                  rA| j                  j	                  t
              j)                  |j^                        }|rd*|_        d+t]               v r|r|j^                  r|| j                  j	                  t,              j)                  |j^                        }|rBd*|_'        ta        |      d d, |_1        t        j                  t        j                         |_,        | j                  j                          |# t:        $ r=}t        j                  d-|        | j                  j[                          Y d }~|d }~ww xY wd }~ww xY w).NorderszNo seller_id found for sync.entityrunning  zResuming stale job...z(Initial load already running for orders.offsetr   	processedinitial     tzinfor'   job_typestatus	date_fromdate_toz2025-01-01T00:00:00.000-00:00Tz%[InitialLoad] Fetching orders offset ...date_asc)sellerzorder.date_created.fromzorder.date_created.tosortr*   limitGETz/orders/searchparams   
API Error : resultspagingtotalFz/orders/idcreatedzError processing order )r*   r+         ?	completedz'[InitialLoad] Orders Completed. Total: z[InitialLoad] Failed: controlfailedjob  z%Critical: Failed to log error state: )2r#   loggererrorr   r   r   r   r'   r    addcommitinitial_load_status
updated_atr   nowr   utcsecondswarninginitial_load_checkpointgetinitial_load_started_atr   	isoformatinfo
BATCH_SIZEr   requeststatus_code	Exceptiontextjson_upsert_orderleninitial_load_processed_recordsinitial_load_total_recordstimesleepinitial_load_completed_atr3   records_foundrecords_createdrecords_updatedrecords_failedfinished_atrollbacklocalsrD   strerror_message)r   ENTITY	seller_idrH   
checkpointr*   total_processedrJ   r4   r5   has_morerE   updatedrI   r=   respdatar%   rB   rC   
order_datadetail_resp
full_orderreseexs                             r   load_orderszInitialLoadService.load_orders   s   '')	LL78''--,33K4F4F&4PQWWY!0GGGKK GGNN&&)3!!x||HLL'AGDVDV'V&_&_bf&f67IJ44:
!,$..a8&/#*1*I*I*gX\\ZbZfZfMg'Vi	 (q!HLL IS[S_S_`h`l`lSmoCg	7Ill8<<0::<GHGGFCF83OP (/8-4&$' {{**52B6*R##s*#j1A1A0B"TYYK$PQQyy{)R0(B/

7A.$H"( )J$&*kk&9&9%8JW[L\K]A^&_&22c9)4)9)9);J"&"4"4Z"@C"i/A")Q,'"aKF $q(O)"  #f+%=CRa2b/9H65:2 

3U?$Hk n +6G'08X\\0JG-$CJ /C")C")C!'C&ll8<<8COGGNNKKA/ARSTGGNNKKA/ARSTC % $'>z$?O>PPRSTRU%VW!$F  	LL1!56GG#(W"ggmmK8<<WZZHGh ;FH$77==155cff=S&.-0VDS\*+3<<+E 
 G	  #DRDIJ  ""G	#%	sw   DU A(T;A?U <CU 	U$#UU UU 
[-2[(DZ[(	[%(2[ [( [%%[(([-rx   c                    t        |j                  d            }| j                  j                  t              j                  t        j                  |k(        j                         }| j                  |      }|j                  d      }d}|r:|j                  r.t        |j                        dkD  rt        |j                        }nt        | d      r| j                  ry|rw|dk7  rr	 | j                  j                  |      }|rT|j                  di       }t        |j                  dd      xs |j                  d	d            }	|j                  d
      r|	}||d<   d}
|s)t	        |      }| j                  j                  |       d}
|j                         D ]  \  }}t!        |||        | j#                  ||j                  dg              |
S #  Y xY w)NrD   shipping_id        r   r   Noneshipping_option	list_costcostfree_shippingshipping_costrv   )ml_order_idrE   order_items)ro   rW   r   r   r   r   r   r    _parse_order_datar   floathasattrr   get_shipmentrN   itemssetattr_upsert_items)r   rx   order_idexistingparsedr   r   shipmentsor   r3   kvs                r   ra   z InitialLoadService._upsert_order   s   txx~&77==)001D1D1PQWWY''- jj/ ..59O9O3PST3T!("8"89MT=)d.>.>;S^bhSh++88E!&7<B Q!7!L266&!;LMD||O4)- #084HGGKK!FLLN 	$DAqHa#	$ 	8TXXmR%@A Ds   (A1G Gorder
items_datac                 L   |D ]  }|j                  di       j                  d      }|s(| j                  j                  t              j	                  t        j
                  |j
                  k(  t        j                  |k(        j                         }|st        |j
                  ||j                  di       j                  d      |j                  d      |j                  d      |j                  d      |j                  di       j                  d            }| j                  j                  |       7|j                  d      |_	        |j                  d      |_
        |j                  d      |_        |j                  di       j                  d      |_         y )	NitemrD   titlequantity
unit_pricesale_fee
seller_sku)r   
ml_item_idr   r   r   r   sku)rW   r   r   r	   r   r   r   r    rN   r   r   r   r   )r   r   r   r   item_idexisting_itemnew_items          r   r   z InitialLoadService._upsert_items   sR    	LDxx+//5WX!WW]];7>>((E,=,==''72 uw 
 "'!&!2!2 '88FB/33G<"hhz2 $ 6"hhz2&"-11,? X&*.((:*>',0HH\,B)*.((:*>'%)XXfb%9%=%=l%K"1	Lr   dc                 >   d } ||j                  d            } ||j                  d            } ||j                  d            }|j                  di       }|j                  di       }d}i dt        |j                  d	i       j                  d
            d|j                  d      dt        |j                  d      t              r!|j                  di       j                  d      nt        |j                  d            d|j                  d      d|j                  d      d|j                  d      dt        |j                  d
            d|j                  d      d|j                  d      d|j                  d      dt        |j                  d
            d|j                  d      ddd|d|d|d|j                  d      rt        |j                  d            nd t	        j
                  |j                  dg             |dS )Nc                     | sy | j                  dd      } t        j                  |       }|j                  r|j	                  t
        j                        }|j                  d       S NZz+00:00r/   replacer   fromisoformatr0   
astimezoner   rS   dt_strdts     r   parse_dtz6InitialLoadService._parse_order_data.<locals>.parse_dt   sQ    $^^C2F''/Byy]]8<<0::T:**r   date_createddate_closedlast_updatedbuyershippingr   rr   r8   rD   r3   status_detaildescriptiontotal_amountpaid_amountcurrency_idbuyer_idbuyer_nicknamenicknamebuyer_first_name
first_namebuyer_last_name	last_namer   shipping_statusr   pack_idtags)r   raw_data)rW   ro   
isinstancedictr`   dumps)	r   r   r   r   r   r   r   r   r   s	            r   r   z$InitialLoadService._parse_order_data   sN   		+  n 56quu]34n 56gr"55R( 

QUU8R044T:;
aeeHo
 jYZY^Y^_nYoquNvQUU?B7;;MJ|  AB  AF  AF  GV  AW  }X
 AEE.1	

 155/
 155/
 EIIdO,
 eii
3
 		, 7
 uyy5
 3x||D12
 x||H5
 S
 L
 ;
  L!
" i0@s155+,d#
$ JJquuVR01'
 	
r   c                 0   d}| j                         }|sy | j                  j                  t              j	                  t        j
                  |k(        j                         }|sAt        |      }| j                  j                  |       | j                  j                          |j                  dk(  ru|j                  rSt        j                  t        j                        |j                  z
  j                  dkD  rt         j#                  d       nt         j#                  d       y |j$                  xs i }|j'                  dd       }|j'                  dd	      }d|_	        |j(                  xs# t        j                  t        j                        |_        t+        |d
dt        dddt        j                        t        j                  t        j                              }| j                  j                  |       | j                  j                          	 d}d	}	d	}
d	}|rvt         j-                  d| d       dddd}|r||d<   | j.                  j1                  dd| d|      }|j2                  dk7  r%t5        d|j2                   d|j6                         |j9                         }|j'                  dg       }|j'                  d      xs! |j'                  di       j'                  d      }|sd}nd }t;        d	t=        |      |      D ]  }||||z    }d!j?                  |      }| j.                  j1                  dd"d#|i      }|j2                  dk(  rb|j9                         }|D ]L  }|j'                  d$      dk(  r1| jA                  |j'                  d%            }|d&k(  r|	dz  }	B|
dz  }
H|dz  }N n#t         jC                  d'       |t=        |      z  }|t=        |      z  } | j                  j                          |}||d(|_        ||_"        |j'                  di       j'                  d)      r%|j'                  d      j'                  d)      |_#        | j                  j                          tI        jJ                  d*       |rvd+|_	        t        j                  t        j                        |_&        d+|_'        ||_(        |	|_)        |
|_*        ||_+        t        j                  t        j                        |_,        | j                  j                          t         j-                  d,|        | j                  j                          t         j-                  d,|        y # t4        $ r}t         jC                  d-|        | j                  j[                          	 d.t]               v rO|rM|j^                  rA| j                  j                  t              j'                  |j^                        }|rd/|_	        d0t]               v r|r|j^                  r|| j                  j                  t*              j'                  |j^                        }|rBd/|_'        ta        |      d d1 |_1        t        j                  t        j                        |_,        | j                  j                          |# t4        $ r=}t         jC                  d2|        | j                  j[                          Y d }~|d }~ww xY wd }~ww xY w)3Nadsr&   r(   r)   zResuming stale ads job...z%Initial load already running for ads.	scroll_idr+   r   r,   r-   r.   r/   r1   Tz%[InitialLoad] Fetching ads scroll_id r6   scanactived   )search_typer3   r:   r;   z/users/z/items/searchr<   r>   r?   r@   rA   rB   F   ,z/itemsidscodebodyrE   z Failed to fetch ad details chunk)r   r+   rC   rF   rG   z$[InitialLoad] Ads Completed. Total: z[InitialLoad] Ads Failed: rH   rI   rJ   rK   z)Critical: Failed to log ads error state: )2r#   r   r   r   r   r'   r    rN   rO   rP   rQ   r   rR   r   rS   rT   rL   rU   rV   rW   rX   r   rZ   r   r\   r]   r^   r_   r`   rangerb   join
_upsert_adrM   rc   rd   re   rf   rg   r3   rh   ri   rj   rk   rl   rm   rn   rD   ro   rp   )r   rq   rr   rH   rs   r   rt   rJ   ru   rE   rv   rI   r=   rw   rx   rA   new_scroll_id
chunk_sizei	chunk_idsids_strdetails_respr   	item_wrapr|   r}   r~   s                              r   load_adszInitialLoadService.load_ads-  s   '')	&''--,33K4F4F&4PQWWY!0GGGKK GGNN&&)3""X\\(BWEWEW(W'`'`cg'g:;FG44:
NN;5	$..a8&/#*1*I*I*gX\\ZbZfZfMg'Vi	 (q!HLL IS[S_S_`h`l`lSmoCd	HGGFCI;cRS $*& 
 *3F;'{{**5GI;m2T]c*d##s*#j1A1A0B"TYYK$PQQyy{((9b1 $ 5 `(B9O9S9ST_9`$H  
q#g,
; 6A '!J, 7I!hhy1G#';;#6#6uhPUW^O_#6#`L#//36%1%6%6%8
)3 ,I(}}V4;&*ooimmF6K&L#&)#3W\W&-lg &!, 'GI#i.0#s9~5O%6(  )	@IXg2h/9H688Hb)--g69=(9K9O9OPW9XG6 

3q t +6G'08X\\0JG-$CJ /C")C")C!'C&ll8<<8COGGNNKK>>OPQGGNNKK>>OPQ 	LL5aS9:GG$(W#ww}}[9==gjjIWx!<FH$77==155cff=S&.-0VDS\*+3<<+E 
 G	  $ I"NO!!##G	$!	sK   I?U= CU= =
\2\:D[\	\2\\\\\c                    |j                  d      }| j                  j                  t              j	                  t        j
                  |k(        j                         }| j                  |      }d}|s)t        |      }| j                  j                  |       d}|j                         D ]&  \  }}|dk(  r|s|j                  rt        |||       ( | j                  ||j                  dg              |S )NrD   rv   )rD   rE   r   
variations)rW   r   r   r
   r   rD   r    _parse_ad_datarN   r   r   r   _upsert_variations)r   rx   r   r   r   r3   r   r   s           r   r   zInitialLoadService._upsert_ad  s    ((4.77==$++BEEW,<=CCE$$T*W~HGGKK!FLLN 	$DAqEz!<<Ha#	$ 	$((<*DEr   c                    d } ||j                  d            } ||j                  d            } ||j                  d            } ||j                  d            }|j                  dg       }|r|d   j                  d      n|j                  d	      }|j                  d
g       }	i d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d	|d|D 
cg c]  }
|
j                  d       c}
d
|	d|j                  d      d|j                  d      d|j                  di       j                  d      |j                  di       j                  d      |j                  di       j                  d      dk(  |j                  d      |||||j                  d       |j                  d!d"      |d#
S c c}
w )$Nc                     | sy | j                  dd      } t        j                  |       }|j                  r|j	                  t
        j                        }|j                  d       S r   r   r   s     r   r   z3InitialLoadService._parse_ad_data.<locals>.parse_dt  sQ    $^^C2F''/Byy]]8<<0::T:**r   r   r   
start_time	stop_timepicturesr   
secure_url	thumbnail
attributesr   subtitlecategory_namecategory_idpriceoriginal_pricer   available_quantitysold_quantityr3   listing_type_idlisting_typeseller_custom_fieldr   shipping_moder   moder   logistic_typefulfillment	permalinkcatalog_product_idcatalog_listingF)
r   is_fullr   r   r   r   r   r   r   r   )rW   )r   r   r   r   r   r   r   r   r   r   ps              r   r   z!InitialLoadService._parse_ad_data  s   
+ !~!67 ~!67quu\23aeeK01EE*b)6>Xa[__\2AEE+DVeeL"-aeeGnz* aeeM2 aeeGn	
 quu%56 AEE-0 "155)=#> aeeO4 quuX &7 8 QUU#45 ) x@!!%%-@ : #AEE*?$@  AEE/0!" aeeJ377?#$  eeJ377Hj"-11/BmS%%,))%##$55)=#> !&7 ?7 
 As   :Iadr   c                    |D ]E  }t        |j                  d            }| j                  j                  t              j                  t        j                  |k(        j                         }|s2t	        ||j                        }| j                  j                  |       |j                  d      |_	        |j                  d      |_
        |j                  d      xs |j                  d      |_        |j                  d      |_        |j                  d      |_        | j                  |j                  dg             |_        H y )NrD   )rD   ad_idr   r   r   picture_idsattribute_combinations)ro   rW   r   r   r   r   rD   r    rN   r   r   r   r   r  _get_flattened_attributesattribute_combination)r   r  r   r   v_idr   s         r   r   z%InitialLoadService._upsert_variations  s     	qAquuT{#Dww}}[18849OPVVXH&$bee<H%UU7^HN*+%%0D*EH'55!67F155;HL+,551F+GH(#$55#7H -1-K-KAEERjlnLo-pH*	qr   attrsc           
          |sy dj                  |D cg c]'  }|j                  d       d|j                  d       ) c}      S c c}w )Nz, namer@   
value_name)r   rW   )r   r
  as      r   r  z,InitialLoadService._get_flattened_attributes	  sA    TyyUSQUU6]O2aeeL.A-BCSTTSs   ,Ar   )__name__
__module____qualname__r   r   r#   r   r   ra   r   listr   r   r   r   r   r
   r   r   r   r   r   r      s    )7 )
0IV/$ /bL7 L L62
4 2
nBHt ./ /bqR qT q Ut Ur   r   )loggingre   r`   r   r   sqlalchemy.ormr   app.models.syncr   r   app.models.ml_orderr   r	   app.models.adr
   app.models.ad_variationr   app.services.meli_apir   	getLoggerr  rL   r[   r   r  r   r   <module>r     sJ       ' " 0 4  / 0			8	$ 
zU zUr   