File size: 3,786 Bytes
b2be963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60470bc
b2be963
 
 
 
60470bc
 
b2be963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60470bc
 
 
b2be963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from app.core.config import settings
from app.db.base import Base, engine
from app.api.auth import router as auth_router
from app.api.products import router as products_router
from app.api.categories import router as categories_router
from app.api.cart import router as cart_router
from app.api.orders import router as orders_router
from app.api.seed import router as seed_router
from app.api.ai_search import router as ai_search_router
from app.api.home import router as home_router
from app.api.admin import router as admin_router
from app.api.notifications import router as notifications_router
from app.api.external import router as external_router
from app.api.settings import router as settings_router
from app.api.analytics import router as analytics_router

# Import models to register them with Base
import app.models.user  # noqa: F401
import app.models.product  # noqa: F401
import app.models.cart  # noqa: F401
import app.models.order  # noqa: F401
import app.models.notification  # noqa: F401
import app.models.settings  # noqa: F401
import app.models.home  # noqa: F401
import app.models.analytics  # noqa: F401


from fastapi.middleware.gzip import GZipMiddleware
from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Startup logic - Minimal and fast
    print(">>> [MAIN] Application starting (DB maintenance disabled).")
    yield
    # Shutdown logic (optional)
    # Shutdown logic (optional)

def create_app() -> FastAPI:
    app = FastAPI(
        title="VortexCommerce API",
        description="AI-Powered Bilingual E-Commerce Platform",
        version="1.0.0",
        docs_url="/docs",
        redoc_url="/redoc",
        lifespan=lifespan
    )

    # CORS
    app.add_middleware(
        CORSMiddleware,
        allow_origins=settings.cors_origins_list,
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )

    # Response Compression
    app.add_middleware(GZipMiddleware, minimum_size=1000)

    # Routers
    app.include_router(auth_router, prefix="/api")
    app.include_router(products_router, prefix="/api")
    app.include_router(categories_router, prefix="/api")
    app.include_router(cart_router, prefix="/api")
    app.include_router(orders_router, prefix="/api")
    app.include_router(seed_router, prefix="/api")
    app.include_router(external_router, prefix="/api")
    app.include_router(ai_search_router, prefix="/api")
    app.include_router(admin_router, prefix="/api")
    app.include_router(notifications_router, prefix="/api")
    print(">>> [MAIN] Registering analytics router at /api/analytics")
    app.include_router(analytics_router, prefix="/api")
    
    app.include_router(settings_router, prefix="/api")
    app.include_router(home_router, prefix="/api")

    VERSION = "2.0.0-FINAL-CATALOG"

    @app.get("/", tags=["Health"])
    async def root():
        """FORCE RELOAD Health Check"""
        return {
            "status": "online", 
            "service": "VortexCommerce-CORE-API",
            "version": VERSION,
            "ts": "2026-03-16-T-13-45",
            "msg": "New container is active"
        }

    @app.get("/health", tags=["Health"])
    async def health_check():
        return {
            "isSuccess": True,
            "value": {
                "status": "healthy", 
                "service": "VortexCommerce API",
                "version": VERSION
            },
            "statusCode": 200,
        }

    print(f">>> [MAIN] Application initialized. Version: {VERSION}")
    return app

app = create_app()