a
    BwjC                     @  sN   d dl mZ d dlZd dlZd dlmZ ddlmZmZm	Z	 G dd dZ
dS )    )annotationsN)Path   )DecisionSnapshot
AlertEventEventPriorityc                   @  sP   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdddZ	dd Z
dS )SQLiteStateStoredata/hanz_realtime.dbc                 C  s(   t || _| jjjddd |   d S )NT)parentsexist_ok)r   pathparentmkdir_init)selfr    r   5/home/opc/hanz-radar/runtime/src/hanz_server/store.py__init__   s    zSQLiteStateStore.__init__c                 C  s   t | j}t j|_|S )N)sqlite3Zconnectr   ZRowZrow_factoryr   cr   r   r   _con       zSQLiteStateStore._conc                 C  s6   |   }|d W d    n1 s(0    Y  d S )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   Zexecutescriptr   r   r   r   r   	   s    
zSQLiteStateStore._initc                 C  s\   |   $}|d||f }W d    n1 s20    Y  |d u rHd S tt|d S )Nz9SELECT payload FROM decisions WHERE market=? AND symbol=?payload)r   executeZfetchoner   from_mappingjsonloads)r   marketsymbolr   rr   r   r   get_decision   s    <zSQLiteStateStore.get_decisionc              
   C  sT   |   8}|d|j|jtj| dd|jf W d    n1 sF0    Y  d S )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   r   r   r   upsert_decision   s    z SQLiteStateStore.upsert_decisionc              	   C  sP   |   4}|d|jtj| dd|jf W d    n1 sB0    Y  d S )Nz,INSERT OR IGNORE INTO events VALUES(?,?,?,0)Fr"   )r   r   event_idr   r$   r%   
created_at)r   er   r   r   r   
save_event   s    zSQLiteStateStore.save_event2   c                 C  s   |   .}|dtdt|df }W d    n1 s<0    Y  g }|D ]z}t|d }|t|d |d |d |d |	d	|d
 t
|d  t|d |d |	d|	d|d |d  qN|S )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minZfetchallr   r   appendr   getr   int)r   limitr   Zrowsoutr    pr   r   r   list_events   s
    FxzSQLiteStateStore.list_eventsc                 C  s:   |   }|d|f W d    n1 s,0    Y  d S )Nz.UPDATE events SET delivered=1 WHERE event_id=?)r   r   )r   r)   r   r   r   r   mark_delivered   s    zSQLiteStateStore.mark_deliveredN)r	   )r-   )__name__
__module____qualname__r   r   r   r!   r(   r,   r?   r@   r   r   r   r   r      s   

r   )
__future__r   r   r   pathlibr   modelsr   r   r   r   r   r   r   r   <module>   s   