Files
erp-nutzfahrzeuge/backend/app/main.py
T

64 lines
1.7 KiB
Python
Raw Normal View History

"""FastAPI application entry point.
Configures CORS, registers routers under /api/v1, exposes health endpoint.
"""
from contextlib import asynccontextmanager
from fastapi import APIRouter, FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.config import settings
from app.routers import auth, contacts, datev, files, ocr, sales, users, vehicles
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application startup and shutdown lifecycle."""
# Startup: could run alembic migrations here in production
yield
# Shutdown: cleanup resources
app = FastAPI(
title=settings.APP_NAME,
description="ERP Nutzfahrzeuge Backend API",
version="1.0.0",
lifespan=lifespan,
)
# CORS configuration from settings
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins_list,
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"],
allow_headers=["*"],
)
# API v1 router
api_v1_router = APIRouter(prefix="/api/v1")
api_v1_router.include_router(auth.router)
api_v1_router.include_router(users.router)
api_v1_router.include_router(vehicles.router)
api_v1_router.include_router(contacts.router)
api_v1_router.include_router(files.router)
api_v1_router.include_router(ocr.router)
api_v1_router.include_router(sales.router)
api_v1_router.include_router(datev.router)
# Health endpoint (no auth required)
@api_v1_router.get("/health", tags=["health"])
async def health_check():
"""Health check endpoint."""
return {"status": "ok"}
app.include_router(api_v1_router)
@app.get("/")
async def root():
"""Root redirect info."""
return {"name": settings.APP_NAME, "version": "1.0.0", "docs": "/docs"}