
    Hh                        d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ ddlmZmZmZmZ d d	lmZmZ  G d
 d      Zy)    )annotations)date)DictIterableListMappingOptionalSequence)Session)select)selectinload   )AccountMetricsDailyPostMetricsDailyPostTypeConnectedAccount)r   MasterAccountc                  \    e Zd ZddZddZ	 	 	 	 	 	 d	dZ	 	 	 	 	 	 	 	 d
dZ	 	 	 	 	 	 ddZy)AnalyticsRepositoryc                    || _         y N)session)selfr   s     F/var/www/html/hubwallet-dev/src/marketing/apps/Analytics/repository.py__init__zAnalyticsRepository.__init__   s	        c                  K   t        t              j                  t        t        j                              j                  t        j                  |k(        }| j                  j                  |       d {   }|j                         S 7 wr   )
r   r   optionsr   master_account_idwhereidr   executescalar_one_or_none)r   connected_account_idstmtress       r   load_connected_accountz*AnalyticsRepository.load_connected_account   sn     #$W\"2"D"DEFU#&&*>>? 	
 LL((..%%'' /s   A4B6B7Bc                  K   |si S t        t        j                  t        j                        j	                  t        j
                  |k(  t        j                  j                  |            }| j                  j                  |       d {   }|j                         D ci c]  }|j                  |j                   c}S 7 7c c}w wr   )
r   r   r!   linkr    r$   in_r   r"   all)r   r$   external_idsr%   r&   rows         r    map_external_posts_to_post_typesz4AnalyticsRepository.map_external_posts_to_post_types   s      Ihkk8==177))-AAMMl+
 LL((..,/GGI6S#&& 66 /6s$   B	C
CC
"C C
C
c                $  K   | j                   j                  t        ||d       d {   }|(t        ||      }| j                   j                  |       |j	                         D ]"  \  }}t        ||      s|t        |||       $ y 7 dw)N)r$   metric_date)r   getr   additemshasattrsetattr)r   r$   dmetricsentitykvs          r   upsert_account_metricsz*AnalyticsRepository.upsert_account_metrics,   s      ||''%9!L
 
 >(%9F LLV$MMO 	&DAqvq!am1%	&
s   'BBAB;B>Bc           	       K   d}|D ]  }|d   |d   d}| j                   j                  t        |       d{   }|&t        d
i |}| j                   j                  |       |j                  di       }|j	                         D ]+  \  }}	t        ||      s|	t        ||t        |	             - d|v r
|d   |_        d|v r
|d   |_	        |d	z  } |S 7 w)z
        rows: [{"post_type_id": int, "metric_date": date, "metrics": {...}, "external_post_id": "...", "permalink": "..."}]
        r   post_type_idr0   )r=   r0   Nr7   external_post_id	permalinkr    )
r   r1   r   r2   r3   r4   r5   intr>   r?   )
r   r$   rowswrittenrpkr8   mr9   r:   s
             r   upsert_post_metrics_batchz-AnalyticsRepository.upsert_post_metrics_batch>   s       	A"#N"3AmDTUB<<++,<bAAF~)/B/  ( i$A	 /161%!-FAs1v./ "Q&*+,>*?'a#$[> qLG#	$ ! Bs   6CCA CC>CN)r   r   )r$   rA   returnzConnectedAccount | None)r$   rA   r,   z	List[str]rH   zDict[str, int])r$   rA   r6   r   r7   z Dict[str, Optional[int | float]]rH   None)r$   rA   rB   z
List[Dict]rH   rA   )__name__
__module____qualname__r   r'   r.   r;   rG   r@   r   r   r   r      sk    (
7$'
77@
7	
7&$'&,0&;[&	&$$'/9	r   r   N)
__future__r   datetimer   typingr   r   r   r   r	   r
   sqlalchemy.ormr   
sqlalchemyr   r   modelr   r   r   r    src.marketing.apps.Account.modelr   r   r@   r   r   <module>rT      s6    "  D D "  ' 
 MF Fr   