o
    k˓h                     @   s|  d Z ddlZddlZddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	l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 ejd ddlmZ eje eej!ddd e"e#Z$eej%ej&dZ'ej(rej)ej(e'gddd d#ddZ*defddZ+e*  e+ Z,e,-dde.fddZ/e#dkrddl0Z0e$1d e0j2e,d d!d" dS dS )$z|
FastAPI application entry point for Aiguid Backend API.
Handles application initialization, middleware setup, and routing.
    N)Path)datetime)FastAPI)CORSMiddleware)SentryAsgiMiddleware)LoggingIntegration)settings)engine)Base)auth)RateLimitMiddlewareLoggingMiddlewareSecurityMiddlewarez/opt/aiguide/app/modelsz1%(asctime)s [%(levelname)s] %(name)s: %(message)sz%Y-%m-%d %H:%M:%S)levelformatdatefmt)r   event_levelTg      ?)dsnintegrationssend_default_piitraces_sample_ratereturnc               
   C   sX   zt jjtd tjjtd td W dS  ty+ }  z	td|    d} ~ ww )zInitialize database tables.)bindu%   ✅ Database initialized successfullyu#   ❌ Database initialization error: N)	AiguideBasemetadata
create_allr	   r
   loggerinfo	Exceptionerror)e r!   %/var/www/html/aiguide_backend/main.pyinit_database3   s   r#   c                  C   sz   t tjdtjddd} tjr| jttjd | t | t	 | t
 tjr5| jttjddgdgd | tj | S )	z)Create and configure FastAPI application.z)Backend API for Aiguid travel applicationz	/api/docsz
/api/redoc)titledescriptionversiondocs_url	redoc_url)requests_per_minuteT*)allow_originsallow_credentialsallow_methodsallow_headers)r   r   APP_NAMEAPP_VERSIONENABLE_RATE_LIMITINGadd_middlewarer   RATE_LIMIT_REQUESTSr   r   r   ENABLE_CORSr   ALLOWED_ORIGINSinclude_routerr   router)appr!   r!   r"   
create_app=   s,   


	r9   z/api/healthc               
      s   t d z%ddlm}  t }|| d W d   n1 s#w   Y  d}W n tyG } zt d|  d}W Y d}~nd}~ww d	d
t	
  tj|ddS )zHealth check endpoint.u   🔍 Health check requestr   )textzSELECT 1NhealthyzDatabase health check failed: 	unhealthyokzAiguid API is running
production)statusmessage	timestampr&   databaseenvironment)r   r   
sqlalchemyr:   r	   connectexecuter   r   r   now	isoformatr   r0   )r:   conn	db_statusr    r!   r!   r"   health_checki   s(   


rK   __main__u    🚀 Starting Aiguid Backend APIz	127.0.0.1iJ  )hostport)r   N)3__doc__loggingsyspathlibr   r   
sentry_sdkfastapir   fastapi.middleware.corsr   sentry_sdk.integrations.asgir   sentry_sdk.integrations.loggingr   configr   rB   r	   modelsr
   routersr   
middlewarer   r   r   pathappend	models_dbr   basicConfiggetattr	LOG_LEVEL	getLogger__name__r   INFOERRORsentry_logging
SENTRY_DSNinitr#   r9   r8   getdictrK   uvicornr   runr!   r!   r!   r"   <module>   sZ    



'
