
    ngjC                    T    S SK Jr  S SKrS SKrS SKJr  SSKJrJrJ	r	   " S S5      r
g)    )annotationsN)Path   )DecisionSnapshot
AlertEventEventPriorityc                  L    \ rS rSrSS jrS rS rS rS rS r	SS jr
S	 rS
rg)SQLiteStateStore   c                    [        U5      U l        U R                  R                  R                  SSS9  U R	                  5         g )NT)parentsexist_ok)r   pathparentmkdir_init)selfr   s     C/mnt/data/HANZ_v2.1_ServerCore_EventEngine/src/hanz_server/store.py__init__SQLiteStateStore.__init__   s5    t*	dii..44T44PRVR\R\R^    c                p    [         R                  " U R                  5      n[         R                  Ul        U$ )N)sqlite3connectr   Rowrow_factoryr   cs     r   _conSQLiteStateStore._con   s"    goodii0A!-TUXr   c                z    U R                  5        nUR                  S5        S S S 5        g ! , (       d  f       g = f)NzCREATE TABLE IF NOT EXISTS decisions(market TEXT,symbol TEXT,payload TEXT,updated_at TEXT,PRIMARY KEY(market,symbol));CREATE TABLE IF NOT EXISTS events(event_id TEXT PRIMARY KEY,payload TEXT,created_at TEXT,delivered INTEGER DEFAULT 0);)r   executescriptr   s     r   r   SQLiteStateStore._init	   s*    YY[AOO  K  L [[s   ,
:c                    U R                  5        o3R                  SX45      R                  5       nS S S 5        Wc  S $ [        R                  " [
        R                  " US   5      5      $ ! , (       d  f       N@= f)Nz9SELECT payload FROM decisions WHERE market=? AND symbol=?payload)r   executefetchoner   from_mappingjsonloads)r   marketsymbolr   rs        r   get_decisionSQLiteStateStore.get_decision   s^    YY[A		*egmfu v    !Ba[yt]&6&C&CDJJqQZ|D\&]] [s   !A,,
A:c                    U R                  5        o"R                  SUR                  UR                  [        R
                  " UR                  5       SS9UR                  45        S S S 5        g ! , (       d  f       g = f)NzINSERT INTO decisions VALUES(?,?,?,?) ON CONFLICT(market,symbol) DO UPDATE SET payload=excluded.payload,updated_at=excluded.updated_atFensure_ascii)r   r&   r+   r,   r)   dumpsto_dict
updated_at)r   dr   s      r   upsert_decision SQLiteStateStore.upsert_decision   s    YY[Aii  )q  st  s{  s{  |}  |D  |D  EI  EO  EO  PQ  PY  PY  P[  in  Eo  pq  p|  p|  r}  ~[[[s   AA//
A=c           
         U R                  5        o"R                  SUR                  [        R                  " UR                  5       SS9UR                  45        S S S 5        g ! , (       d  f       g = f)Nz,INSERT OR IGNORE INTO events VALUES(?,?,?,0)Fr1   )r   r&   event_idr)   r3   r4   
created_at)r   er   s      r   
save_eventSQLiteStateStore.save_event   si    YY[Aii(VXYXbXbcgcmcmnonwnwny  HM  dN  OP  O[  O[  X\  ][[[s   A
A$$
A2c                
   U R                  5        o"R                  S[        S[        US5      5      45      R	                  5       nS S S 5        / nW H  n[
        R                  " US   5      odR                  [        US   US   US   US   UR                  S	5      US
   [        US      [        US   5      US   UR                  S5      UR                  S5      US   US   5      5        M     U$ ! , (       d  f       N= f)Nz;SELECT payload FROM events ORDER BY created_at DESC LIMIT ?r   i  r%   r:   r,   r+   
event_type
old_action
new_actionpriorityevidencerisktriggerpricer;   
message_id)r   r&   maxminfetchallr)   r*   appendr   getr   int)r   limitr   rowsoutr-   ps          r   list_eventsSQLiteStateStore.list_events   s   YY[A99-jlopqruv{|  sA  mB  lD  $E  $N  $N  $Pd[Ajj9&A

:a
mAhKXYZbXcdefrdstutyty  {G  uH  IJ  KW  IX  Yf  gh  is  gt  Yu  vy  z{  |F  zG  vH  IJ  KQ  IR  ST  SX  SX  Yb  Sc  de  di  di  jq  dr  st  uA  sB  CD  EQ  CR  4S  )T 
	 [s   5C44
Dc                |    U R                  5        o"R                  SU45        S S S 5        g ! , (       d  f       g = f)Nz.UPDATE events SET delivered=1 WHERE event_id=?)r   r&   )r   r:   r   s      r   mark_deliveredSQLiteStateStore.mark_delivered   s$    YY[Aii(XZbYde[[[s   -
;)r   N)zdata/hanz_realtime.db)2   )__name__
__module____qualname____firstlineno__r   r   r   r.   r7   r=   rS   rV   __static_attributes__ r   r   r
   r
      s.    _UL^~]fr   r
   )
__future__r   r)   r   pathlibr   modelsr   r   r   r
   r^   r   r   <module>rb      s     "   ? ?f fr   