
    :j                         d 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
 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mZmZmZ d
 Z e       Zedk(  rej7                  ddd       yy)zQ
BookBeach Application
Refactored Flask application using Blueprint architecture
    )Flask)CORS)LoginManager	UserMixin)create_enginetext)sessionmakerN)ADMIN_CONFIG)main_bpapi_bpauth_bpadmin_bpbusiness_bp	static_bpc                  <   t        t        dd      } t        d   | j                  d<   d| j                  d<   d| j                  d<   t	        | g d	
       t               }|j                  |        d|_         G d dt              |j                  fd       }| j                  t               | j                  t               | j                  t               | j                  t               | j                  t        d       | j                  t                | S )zApplication factory pattern	templatesstatic)template_folderstatic_folder
SECRET_KEYi   MAX_CONTENT_LENGTHzstatic/uploadsUPLOAD_FOLDER)zhttp://localhost:8001zhttp://127.0.0.1:8001zhttp://localhost:8080zhttp://127.0.0.1:8080)originszadmin.admin_loginc                       e Zd Zd Zy)create_app.<locals>.AdminUserc                      || _         || _        y )N)idusername)selfr   s     &/var/www/bookbeach.app/backend/main.py__init__z&create_app.<locals>.AdminUser.__init__-   s    DG$DM    N)__name__
__module____qualname__r!    r"   r    	AdminUserr   ,   s    	%r"   r'   c                    | t         d   k(  r |       S 	 t         d   }t        |      }t        dd|      } |       }|j                  t	        d      d| i      j                         }|j                          |r |       S 	 y #  Y y xY w)NADMIN_USERNAMEDATABASE_URLF)
autocommit	autoflushbindaE  
                SELECT u.user_id, u.email, u.first_name, ur.role_name
                FROM users u
                JOIN user_roles ur ON u.role_id = ur.role_id
                WHERE (u.first_name = :user_id OR u.email = :user_id)
                AND u.is_active = true
                AND ur.role_name = 'admin'
            user_id)r
   r   r	   executer   fetchoneclose)r.   r*   engineSessionLocaldbuser_resultr'   s         r    	load_userzcreate_app.<locals>.load_user1   s     l#344W%%	'7L"<0F'5EPVWLB **T + & g&( )1
  HHJ )) 
 	s   A-B Bz/admin)
url_prefix)r   r#   r
   configr   r   init_app
login_viewr   user_loaderregister_blueprintr   r   r   r   r   r   )applogin_managerr6   r'   s      @r    
create_appr?      s    
*%'C
  ,L9CJJ|'7CJJ#$"2CJJ 	   !NM32M%I %
  B 7#6"7#8$;8<9%Jr"   __main__Tz0.0.0.0i  )debughostport)__doc__flaskr   
flask_corsr   flask_loginr   r   
sqlalchemyr   r   sqlalchemy.ormr	   ossysr8   r
   
app.routesr   r   r   r   r   r   r?   r=   r#   runr&   r"   r    <module>rN      s^   
   / * ' 	 
   R QFR lzGG$YTG2 r"   