app.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from math import log
  2. from fastapi import FastAPI
  3. from fastapi.middleware.cors import CORSMiddleware
  4. from starlette.middleware.sessions import SessionMiddleware
  5. from config.settings import DEVELOPMENT, SECRET_KEY
  6. from models import user
  7. from routes import sales
  8. from services.email_service import initialize_email_sender
  9. from middleware.no_cache import NoCacheMiddleware
  10. from logging import getLogger
  11. logger = getLogger(__name__)
  12. def create_app() -> FastAPI:
  13. """Create and configure FastAPI application"""
  14. logger.info("Creating FastAPI application")
  15. try:
  16. if DEVELOPMENT:
  17. logger.info("Creating FastAPI app in development mode")
  18. app = FastAPI(
  19. title="Web Pedidos Klein - FastAPI Backend",
  20. description="Backend for the Web Pedidos Klein application using FastAPI"
  21. )
  22. else:
  23. logger.info("Creating FastAPI app in production mode")
  24. app = FastAPI(
  25. title="Web Pedidos Klein - FastAPI Backend",
  26. description="Backend for the Web Pedidos Klein application using FastAPI",
  27. version="1.0.0"
  28. )
  29. # Initialize email sender
  30. logger.info("Initializing email sender")
  31. initialize_email_sender()
  32. logger.info("Email sender initialized")
  33. # Add CORS middleware
  34. logger.info("Adding CORS middleware")
  35. app.add_middleware(
  36. CORSMiddleware,
  37. allow_origins=["https://admin.kleinexpress.store", "https://kleinexpress.store", "http://localhost:8000"],
  38. allow_credentials=True,
  39. allow_methods=["*"],
  40. allow_headers=["*"],
  41. )
  42. # Add SessionMiddleware
  43. logger.info("Adding session middleware")
  44. app.add_middleware(
  45. SessionMiddleware,
  46. secret_key=SECRET_KEY,
  47. max_age=60 * 60 # max_age in seconds for Starlette
  48. )
  49. # Add NoCacheMiddleware
  50. logger.info("Adding no-cache middleware")
  51. app.add_middleware(NoCacheMiddleware)
  52. # disable docs
  53. app.docs_url = None
  54. app.redoc_url = None
  55. app.openapi_url = None
  56. logger.info("FastAPI application created successfully")
  57. return app
  58. except Exception as e:
  59. error_msg = f"Error creating FastAPI application: {e}"
  60. logger.error(error_msg)
  61. raise
  62. def setup_routes(app: FastAPI):
  63. """Setup all application routes"""
  64. logger.info("Setting up application routes")
  65. try:
  66. from routes import chat, users, products, orders, static
  67. from fastapi import Depends
  68. from auth.security import get_current_user
  69. # Chat routes
  70. logger.info("Setting up chat routes")
  71. app.include_router(
  72. chat.chat_router,
  73. prefix="/api/chat",
  74. tags=["Chat"]
  75. )
  76. # User routes
  77. logger.info("Setting up user routes")
  78. app.include_router(users.user_router, prefix="/api/users", tags=["Users"])
  79. # Product routes
  80. logger.info("Setting up product routes")
  81. app.include_router(
  82. products.product_router,
  83. prefix="/api/products",
  84. tags=["Products"],
  85. dependencies=[Depends(get_current_user)]
  86. )
  87. # Order routes
  88. logger.info("Setting up order routes")
  89. app.include_router(
  90. orders.order_router,
  91. prefix="/api/orders",
  92. tags=["Orders"],
  93. dependencies=[Depends(get_current_user)]
  94. )
  95. # Sales routes
  96. logger.info("Setting up sales routes")
  97. app.include_router(
  98. sales.sales_router,
  99. prefix="/api/sales",
  100. tags=["Sales"],
  101. dependencies=[Depends(get_current_user)]
  102. )
  103. # Verification routes
  104. logger.info("Setting up verification routes")
  105. app.include_router(users.verify_router, prefix="/verify", tags=["Verification"])
  106. app.include_router(users.recovery_pin_router, prefix="/recovery", tags=["Recovery PIN"])
  107. # Static routes
  108. logger.info("Setting up static routes")
  109. from fastapi.responses import HTMLResponse
  110. app.add_api_route("/", static.serve_app_html, methods=["GET"],
  111. response_class=HTMLResponse, include_in_schema=False)
  112. app.add_api_route("/register", static.serve_register_html, methods=["GET"],
  113. response_class=HTMLResponse, include_in_schema=False)
  114. app.add_api_route("/images/{image_path:path}", static.serve_image, methods=["GET"],
  115. response_class=HTMLResponse, include_in_schema=False)
  116. # Mount static files
  117. logger.info("Mounting static file directories")
  118. static.mount_main_static_files(app)
  119. static.mount_register_static_files(app)
  120. logger.info("Application routes setup completed successfully")
  121. except Exception as e:
  122. error_msg = f"Error setting up application routes: - {e}"
  123. logger.error(error_msg)
  124. raise e