
    i@
              
       
   d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	m
Z
mZ d dlmZ  e j        e          Zej        Zes ed           e	eddd	d
ddd          Z eee
dd          Zed             ZdefdZd ZdS )    N)asynccontextmanager)declarative_base)MetaDatatext)create_async_engineAsyncSessionasync_sessionmaker)settingsz/Database URL not configured. Please set DB_URL.
      i  TF)	pool_sizemax_overflowpool_timeoutpool_recyclepool_pre_pingechofuture)bindclass_expire_on_commit	autoflushc                 <  K   t                      } 	 | W V  nJ# t          $ r=}|                                  d{V  t                              d|             d}~ww xY w	 |                                  d{V  dS # |                                  d{V  w xY w)zm
    Async DB session (non-blocking)
    Usage:
        async with get_async_db() as db:
            ...
    Nz"DB session rollback due to error: )AsyncSessionLocal	Exceptionrollbackloggererrorclosesessiones     6/var/www/html/ls-ibe-bot-apis/app/models/connection.pyget_async_dbr#   3   s       .//G            =!==>>> 	 mmoogmmoos%    A? 
A8AAA? ?Breturnc                  j  K   	 t                      4 d{V } |                     t          d                     d{V  ddd          d{V  n# 1 d{V swxY w Y   t                              d           dS # t
          $ r(}t                              d|            Y d}~dS d}~ww xY w)z
    Verify DB connection
    NzSELECT 1u   ✅ Database connection OKTu    ❌ Database connection failed: F)r#   executer   r   infor   r   r   s     r"   check_database_connectionr(   I   sL     >> 	4 	4 	4 	4 	4 	4 	4W//$z"2"2333333333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	40111t   ;;;<<<uuuuus:   B  )AB  
AB   A!B   
B2
B--B2c                     K   	 t                                            d{V  t                              d           dS # t          $ r(} t                              d|             Y d} ~ dS d} ~ ww xY w)z9
    Close all DB connections (call on app shutdown)
    Nu    🧹 Database connections closedzError closing DB connections: )async_enginedisposer   r'   r   r   )r!   s    r"   cleanup_connectionsr,   Z   s      ;""$$$$$$$$$677777 ; ; ;9a99:::::::::;s   9? 
A1	A,,A1)logging
contextlibr   sqlalchemy.ormr   
sqlalchemyr   r   sqlalchemy.ext.asyncior   r   r	   app.configs.settingsr
   	getLogger__name__r   DB_URLDATABASE_URL
ValueErrorr*   r   r#   boolr(   r,        r"   <module>r;      sl    * * * * * * + + + + + + % % % % % % % %          * ) ) ) ) )		8	$	$
  H
*F
G
GG
 #"		 	 	 '&		      *    "; ; ; ; ;r:   