Files
TapTrack-Hub/backend/app/main.py
kevin-asprec 7d8cc3ca22 feat: add Demo Requests module
- New demo_requests table (SQLAlchemy model + Alembic-ready)
- Public POST /api/demo-requests endpoint for the TapTrack website form
- Super-admin GET/PUT/DELETE endpoints to manage leads
- DemoRequestsPage.vue with stats row, filterable table, status updates, notes modal
- Sidebar nav item and route registered
2026-03-17 09:50:14 +08:00

57 lines
1.9 KiB
Python

"""TapTrack Hub — FastAPI application entry point."""
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.database import engine, Base
# Import all models so Alembic/SQLAlchemy picks them up
from app.models import user, school, license, sms, billing, ticket, audit, announcement, email_log, report, demo_request # noqa
from app.routers import auth, schools, licenses, sms as sms_router, billing as billing_router
from app.routers import tickets, users, dashboard, school_portal, announcements, sync, email as email_router
from app.routers import search, audit
from app.routers import demo_requests as demo_requests_router
@asynccontextmanager
async def lifespan(app: FastAPI):
# Create tables if not exists (dev convenience — use Alembic in prod)
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
yield
app = FastAPI(
title="TapTrack Hub",
description="Cloud control plane for TapTrack on-prem deployments",
version="1.0.0",
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Routers
app.include_router(auth.router)
app.include_router(schools.router)
app.include_router(licenses.router)
app.include_router(sms_router.router)
app.include_router(billing_router.router)
app.include_router(tickets.router)
app.include_router(users.router)
app.include_router(dashboard.router)
app.include_router(school_portal.router)
app.include_router(announcements.router)
app.include_router(sync.router)
app.include_router(email_router.router)
app.include_router(search.router)
app.include_router(audit.router)
app.include_router(demo_requests_router.router)
@app.get("/api/health")
async def health():
return {"status": "ok", "service": "taptrack-hub"}