o
    i                     @   s   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 ee
jddddZed	d	ed
ZeeZG dd deZe e_G dd dZdd Zdd ZdddZee_ee_ee_G dd dZe Zdd ZdS )    )create_engine)sessionmakerscoped_sessionDeclarativeBaseQuery)HTTPException)ConfigT
      )Zpool_pre_pingZ	pool_sizeZmax_overflowF)Z
autocommitZ	autoflushbindc                   @   s   e Zd ZdS )BaseN)__name__
__module____qualname__ r   r   :/home/www/bk.finsightngr.online/finsigh_v2/app/database.pyr      s    r   c                   @   s   e Zd Zdd ZdS )_PaginationResultc                 C   s@   || _ || _|| _|| _|dkr|| d | | _d S d| _d S )Nr      )itemstotalpageper_pageZpages)selfr   r   r   r   r   r   r   __init__   s
   (z_PaginationResult.__init__N)r   r   r   r   r   r   r   r   r      s    r   c                 C   s   | j d d }t||S )Nr   Zentity)Zcolumn_descriptions_scopedget)r   identZ
entity_clsr   r   r   
_query_get$   s   r   c                 C   s"   t | |}|d u rtddd|S )N  z	Not found)status_codedetail)r   r   )r   r   objr   r   r   _query_get_or_404)   s   
r"   r   d   c                 C   sZ   |d u rd}|dk r|rt ddd}|  }| |d | | }t||||dS )Nr
   r   r   )r   )r   r   r   r   )r   countoffsetlimitallr   )r   r   r   Z	error_outZmax_per_pager   r   r   r   r   _query_paginate0   s   
r(   c                   @   s$   e Zd ZeZedd Zdd ZdS )_DBc                 C   s   t S N)enginer   r   r   r   r+   F   s   z
_DB.enginec                 C   s   t jt d S r*   )r   metadata
create_allr+   r,   r   r   r   r.   J   s   z_DB.create_allN)r   r   r   r   sessionpropertyr+   r.   r   r   r   r   r)   C   s
    
r)   c                   c   s"    z
t V  W t   dS t   w )zQFastAPI dependency that yields a scoped session and removes it after the request.N)r   remover   r   r   r   get_dbQ   s   r2   N)r   r
   Tr#   )Z
sqlalchemyr   Zsqlalchemy.ormr   r   r   r   fastapir   
app.configr   SQLALCHEMY_DATABASE_URIr+   Z_session_factoryr   r   Zquery_propertyqueryr   r   r"   r(   r   Z
get_or_404Zpaginater)   dbr2   r   r   r   r   <module>   s0    
	
