update
This commit is contained in:
@@ -15,37 +15,37 @@ import secrets
|
||||
import os
|
||||
import re
|
||||
import logging
|
||||
from .config.settings import settings
|
||||
from .config.logging_config import setup_logging, get_logger
|
||||
from .config.database import engine, Base, get_db
|
||||
from .shared.config.settings import settings
|
||||
from .shared.config.logging_config import setup_logging, get_logger
|
||||
from .shared.config.database import engine, Base, get_db
|
||||
from . import models
|
||||
from sqlalchemy.orm import Session
|
||||
logger = setup_logging()
|
||||
logger.info(f'Starting {settings.APP_NAME} v{settings.APP_VERSION} in {settings.ENVIRONMENT} mode')
|
||||
from .middleware.error_handler import validation_exception_handler, integrity_error_handler, jwt_error_handler, http_exception_handler, general_exception_handler
|
||||
from .middleware.request_id import RequestIDMiddleware
|
||||
from .middleware.security import SecurityHeadersMiddleware
|
||||
from .middleware.timeout import TimeoutMiddleware
|
||||
from .middleware.cookie_consent import CookieConsentMiddleware
|
||||
from .middleware.csrf import CSRFProtectionMiddleware
|
||||
from .middleware.request_size_limit import RequestSizeLimitMiddleware
|
||||
from .middleware.admin_ip_whitelist import AdminIPWhitelistMiddleware
|
||||
from .shared.middleware.error_handler import validation_exception_handler, integrity_error_handler, jwt_error_handler, http_exception_handler, general_exception_handler
|
||||
from .shared.middleware.request_id import RequestIDMiddleware
|
||||
from .security.middleware.security import SecurityHeadersMiddleware
|
||||
from .shared.middleware.timeout import TimeoutMiddleware
|
||||
from .shared.middleware.cookie_consent import CookieConsentMiddleware
|
||||
from .security.middleware.csrf import CSRFProtectionMiddleware
|
||||
from .shared.middleware.request_size_limit import RequestSizeLimitMiddleware
|
||||
from .security.middleware.admin_ip_whitelist import AdminIPWhitelistMiddleware
|
||||
if settings.is_development:
|
||||
logger.info('Creating database tables (development mode)')
|
||||
Base.metadata.create_all(bind=engine)
|
||||
else:
|
||||
try:
|
||||
from .models.cookie_policy import CookiePolicy
|
||||
from .models.cookie_integration_config import CookieIntegrationConfig
|
||||
from .models.page_content import PageContent
|
||||
from .content.models.cookie_policy import CookiePolicy
|
||||
from .content.models.cookie_integration_config import CookieIntegrationConfig
|
||||
from .content.models.page_content import PageContent
|
||||
logger.info('Ensuring required tables exist')
|
||||
CookiePolicy.__table__.create(bind=engine, checkfirst=True)
|
||||
CookieIntegrationConfig.__table__.create(bind=engine, checkfirst=True)
|
||||
PageContent.__table__.create(bind=engine, checkfirst=True)
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to ensure required tables exist: {e}')
|
||||
from .routes import auth_routes
|
||||
from .routes import privacy_routes
|
||||
from .auth.routes import auth_routes
|
||||
from .content.routes import privacy_routes
|
||||
app = FastAPI(title=settings.APP_NAME, description='Enterprise-grade Hotel Booking API', version=settings.APP_VERSION, docs_url='/api/docs' if not settings.is_production else None, redoc_url='/api/redoc' if not settings.is_production else None, openapi_url='/api/openapi.json' if not settings.is_production else None)
|
||||
app.add_middleware(RequestIDMiddleware)
|
||||
app.add_middleware(CookieConsentMiddleware)
|
||||
@@ -125,19 +125,26 @@ async def health_check(db: Session=Depends(get_db)):
|
||||
@app.get('/metrics', tags=['monitoring'])
|
||||
async def metrics():
|
||||
return {'status': 'success', 'service': settings.APP_NAME, 'version': settings.APP_VERSION, 'environment': settings.ENVIRONMENT, 'timestamp': datetime.utcnow().isoformat()}
|
||||
# Import all route modules
|
||||
from .routes import (
|
||||
room_routes, booking_routes, payment_routes, invoice_routes, banner_routes,
|
||||
favorite_routes, service_routes, service_booking_routes, promotion_routes,
|
||||
report_routes, review_routes, user_routes, audit_routes, admin_privacy_routes,
|
||||
system_settings_routes, contact_routes, page_content_routes, home_routes,
|
||||
about_routes, contact_content_routes, footer_routes, chat_routes, privacy_routes,
|
||||
terms_routes, refunds_routes, cancellation_routes, accessibility_routes,
|
||||
faq_routes, loyalty_routes, guest_profile_routes, analytics_routes,
|
||||
workflow_routes, task_routes, notification_routes, group_booking_routes,
|
||||
advanced_room_routes, rate_plan_routes, package_routes, security_routes,
|
||||
email_campaign_routes, blog_routes
|
||||
# Import all route modules from feature-based structure
|
||||
from .auth.routes import auth_routes, user_routes
|
||||
from .rooms.routes import room_routes, advanced_room_routes, rate_plan_routes
|
||||
from .bookings.routes import booking_routes, group_booking_routes
|
||||
from .payments.routes import payment_routes, invoice_routes
|
||||
from .hotel_services.routes import service_routes, service_booking_routes
|
||||
from .content.routes import (
|
||||
banner_routes, page_content_routes, home_routes, about_routes,
|
||||
contact_routes, contact_content_routes, footer_routes, privacy_routes,
|
||||
admin_privacy_routes, terms_routes, refunds_routes, cancellation_routes,
|
||||
accessibility_routes, faq_routes, blog_routes
|
||||
)
|
||||
from .reviews.routes import review_routes, favorite_routes
|
||||
from .loyalty.routes import promotion_routes, loyalty_routes, package_routes
|
||||
from .guest_management.routes import guest_profile_routes
|
||||
from .notifications.routes import chat_routes, notification_routes, email_campaign_routes
|
||||
from .analytics.routes import analytics_routes, report_routes, audit_routes
|
||||
from .security.routes import security_routes
|
||||
from .system.routes import system_settings_routes, workflow_routes, task_routes
|
||||
from .ai.routes import ai_assistant_routes
|
||||
|
||||
# Register all routes with /api prefix (removed duplicate registrations)
|
||||
# Using /api prefix as standard, API versioning can be handled via headers if needed
|
||||
@@ -184,6 +191,7 @@ app.include_router(security_routes.router, prefix=api_prefix)
|
||||
app.include_router(email_campaign_routes.router, prefix=api_prefix)
|
||||
app.include_router(page_content_routes.router, prefix=api_prefix)
|
||||
app.include_router(blog_routes.router, prefix=api_prefix)
|
||||
app.include_router(ai_assistant_routes.router, prefix=api_prefix)
|
||||
logger.info('All routes registered successfully')
|
||||
|
||||
def ensure_jwt_secret():
|
||||
@@ -252,6 +260,16 @@ async def startup_event():
|
||||
if settings.is_production:
|
||||
raise # Fail fast in production
|
||||
|
||||
# Start AI Training Scheduler for automatic self-learning
|
||||
try:
|
||||
from .ai.services.ai_training_scheduler import get_training_scheduler
|
||||
scheduler = get_training_scheduler()
|
||||
scheduler.start()
|
||||
logger.info('AI Training Scheduler started - automatic self-learning enabled')
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to start AI Training Scheduler: {str(e)}', exc_info=True)
|
||||
# Don't fail app startup if scheduler fails
|
||||
|
||||
logger.info(f'{settings.APP_NAME} started successfully')
|
||||
logger.info(f'Environment: {settings.ENVIRONMENT}')
|
||||
logger.info(f'Debug mode: {settings.DEBUG}')
|
||||
@@ -259,6 +277,15 @@ async def startup_event():
|
||||
|
||||
@app.on_event('shutdown')
|
||||
async def shutdown_event():
|
||||
# Stop AI Training Scheduler
|
||||
try:
|
||||
from .ai.services.ai_training_scheduler import get_training_scheduler
|
||||
scheduler = get_training_scheduler()
|
||||
scheduler.stop()
|
||||
logger.info('AI Training Scheduler stopped')
|
||||
except Exception as e:
|
||||
logger.error(f'Error stopping AI Training Scheduler: {str(e)}', exc_info=True)
|
||||
|
||||
logger.info(f'{settings.APP_NAME} shutting down gracefully')
|
||||
if __name__ == '__main__':
|
||||
import uvicorn
|
||||
|
||||
Reference in New Issue
Block a user