+
    \ej                     &   ^ RI Ht ^ RIHt ^ RIHtHtHtHtH	t	 ^ RI
Ht ^ RIHt ^ RIHtHtHt ^ RIHt ^ RIHtHtHtHt ]! R	R
.R7      tR R lt]P7                  R]],          R7      R!R R ll4       t]P=                  R]]	P>                  R7      R R l4       t ]PC                  R]R7      R R l4       t"]PG                  R]	PH                  R7      R R l4       t%]P7                  R]],          R7      ]! ^2^RR7      3R R  ll4       t&R# )"    )	Annotated)UUID)	APIRouterDependsHTTPExceptionQuerystatus)text)AsyncSession)CurrentUsercurrent_userrequire_admin)get_session)AlertConfigCreateAlertConfigOutAlertConfigUpdateAlertLogOutz/admin/alertsalerts)prefixtagsc                $    V ^8  d   QhR\         /# )   return)r   )formats   "app/api/alerts.py__annotate__r      s      n     c                     \        V ^ ,          V ^,          V ^,          V ^,          V ^,          V ^,          \        V 4      ^8  d   V ^,          R7      # RR7      # )r   process)id
company_idtypetargetenabled
created_atkind)r   len)rs   &r   _row_to_cfgr)      sU    Q4AaDqtAaD!A$STUVSWVaZQqT %. r    )response_modelNc          	          V ^8  d   QhR\         \        \        \        4      3,          R\         \        \        \
        4      3,          R\        R,          R\        \        ,          /# )r   session_adminr!   Nr   )	r   r   r   r   r   r   r   listr   )r   s   "r   r   r      sW      *  *|W[%99: *k7=#99: * t * 
.	 *r   c                 <  "   V'       d>   V P                  \        R 4      R\        V4      /4      G Rj  xL
 P                  4       pM0V P                  \        R4      4      G Rj  xL
 P                  4       pV Uu. uF  p\	        V4      NK  	  up#  L^ L/u upi 5i)a+  
                    SELECT id::text, company_id::text, type, target, enabled,
                           created_at, kind
                    FROM alerts_config
                    WHERE company_id = :cid OR company_id IS NULL
                    ORDER BY kind, created_at DESC
                    cidNz
                    SELECT id::text, company_id::text, type, target, enabled,
                           created_at, kind
                    FROM alerts_config ORDER BY kind, created_at DESC
                    )executer
   strallr)   )r-   r.   r!   rowsr(   s   &&&  r   list_alertsr6      s      // J(  #% 	  //  #% 	 %))DqKND))3 *s3   2BB0B%B&B<BBBB)r+   status_codec          
          V ^8  d   QhR\         R\        \        \        \        4      3,          R\        \
        \        \        4      3,          R\        /# )r   payloadr-   r.   r   )r   r   r   r   r   r   r   r   )r   s   "r   r   r   ;   sN      |W[%99: k7=#99: 	r   c                 B  "   V P                   R 8X  d,   RV P                  9  d   \        \        P                  R4      hV P                   R8X  d<   V P                  P                  R4      '       g   \        \        P                  R4      hVP                  \        R4      RV P                  RV P                   RV P                  R	V P                  R
V P                  /4      G Rj  xL
 P                  4       pVP                  4       G Rj  xL
  \        V4      #  L5 L5i)email@zemail target must contain @webhookz"webhook target must be http(s) URLa  
                INSERT INTO alerts_config (company_id, type, target, enabled, kind)
                VALUES (:cid, :ty, :tgt, :en, :kind)
                RETURNING id::text, company_id::text, type, target, enabled,
                          created_at, kind
                r1   tytgtenr&   N)zhttp://zhttps://)r"   r#   r   r	   HTTP_400_BAD_REQUEST
startswithr2   r
   r!   r$   r&   firstcommitr)   )r9   r-   r.   rows   &&& r   create_alertrF   :   s      ||w3gnn#<F779VWW||y )B)BCZ)[)[F779]^^oo w))gllw~~goo
 	
" eg% & ..
s'	
$ s$   C#D%D&%DDDDz/{alert_id}c                    V ^8  d   QhR\         R\        R\        \        \	        \
        4      3,          R\        \        \	        \        4      3,          R\        /# )r   alert_idr9   r-   r.   r   )	r   r   r   r   r   r   r   r   r   )r   s   "r   r   r   \   sX       |W[%99: k7=#99:	
 r   c                   "   VP                  R R7      pV'       g   \        \        P                  R4      hRP	                  R VP                  4        4       4      p/ VCR\        V 4      /CpVP                  \        RV R24      V4      G Rj  xL
 P                  4       pV'       g   \        \        P                  4      hVP                  4       G Rj  xL
  \        V4      #  LV L5i)	T)exclude_unsetznothing to updatez, c              3   .   "   T F  q R V 2x  K  	  R# 5i)z = :N ).0ks   & r   	<genexpr>update_alert.<locals>.<genexpr>e   s     :Mqs$qc]Ms   r    z*
                UPDATE alerts_config SET z WHERE id = :id
                RETURNING id::text, company_id::text, type, target, enabled,
                          created_at, kind
                N)
model_dumpr   r	   rA   joinkeysr3   r2   r
   rC   HTTP_404_NOT_FOUNDrD   r)   )rH   r9   r-   r.   fieldssetsparamsrE   s   &&&&    r   update_alertrX   [   s      d3FF779LMM99:FKKM::D,,c(m,Foo**. 0 	
 		
 eg  F5566
..
s		
 s*   BC+C'C++,C+C)C+)C+)r7   c          
          V ^8  d   QhR\         R\        \        \        \        4      3,          R\        \
        \        \        4      3,          RR/# )r   rH   r-   r.   r   N)r   r   r   r   r   r   r   )r   s   "r   r   r   z   sN      |W[%99: k7=#99: 
	r   c                    "   VP                  \        R 4      R\        V 4      /4      G Rj  xL
  VP                  4       G Rj  xL
  R#  L L5i)z(DELETE FROM alerts_config WHERE id = :idr    N)r2   r
   r3   rD   )rH   r-   r.   s   &&&r   delete_alertr[   y   sM      //784X:O   ..
 s!   *AAAAAAz/logi  )defaultgelec          	          V ^8  d   QhR\         \        \        \        4      3,          R\         \        \        \
        4      3,          R\        R\        \        ,          /# )r   r-   _userlimitr   )	r   r   r   r   r   r   intr/   r   )r   s   "r   r   r      sS      |W[%99:[',"778  
+	r   c                   "   V P                  \        R 4      RV/4      G Rj  xL
 P                  4       pV Uu. uF>  p\        V^ ,          V^,          V^,          V^,          V^,          V^,          R7      NK@  	  up#  L]u upi 5i)z
                SELECT id::text, process_id::text, alert_config_id::text,
                       status, response, created_at
                FROM alerts_log ORDER BY created_at DESC LIMIT :lim
                limN)r    
process_idalert_config_idr	   responser%   )r2   r
   r4   r   )r-   r`   ra   r5   r(   s   &&&  r   	alert_logrh      s      oo EN	
 		
 
ce 	" 
 A	 	t!adQ4!A$1Q4	
  		
s!   !BBBAB>BB)N)'typingr   uuidr   fastapir   r   r   r   r	   
sqlalchemyr
   sqlalchemy.ext.asyncior   app.auth.depsr   r   r   app.dbr   app.schemas.alertr   r   r   r   routerr)   getr/   r6   postHTTP_201_CREATEDrF   patchrX   deleteHTTP_204_NO_CONTENTr[   rh   rL   r   r   <module>rx      s     D D  / B B  _ _	/
	; BtN34 * 5 *F RF<S<ST U@ mN; <: }&*D*DE F F4#45 raC0 6r   