169 lines
5.7 KiB
Python
169 lines
5.7 KiB
Python
"""
|
|
Delphi Consulting Group Database System - Main FastAPI Application
|
|
"""
|
|
from fastapi import FastAPI, Request, Depends
|
|
from fastapi.staticfiles import StaticFiles
|
|
from fastapi.templating import Jinja2Templates
|
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from app.config import settings
|
|
from app.database.base import engine
|
|
from app.models import BaseModel
|
|
from app.models.user import User
|
|
from app.auth.security import get_admin_user
|
|
from app.core.logging import setup_logging, get_logger
|
|
from app.middleware.logging import LoggingMiddleware
|
|
from app.middleware.errors import register_exception_handlers
|
|
|
|
# Initialize logging
|
|
setup_logging()
|
|
logger = get_logger("main")
|
|
|
|
# Create database tables
|
|
logger.info("Creating database tables")
|
|
BaseModel.metadata.create_all(bind=engine)
|
|
|
|
# Initialize FastAPI app
|
|
logger.info("Initializing FastAPI application", version=settings.app_version, debug=settings.debug)
|
|
app = FastAPI(
|
|
title=settings.app_name,
|
|
version=settings.app_version,
|
|
description="Modern Python web application for Delphi Consulting Group",
|
|
)
|
|
|
|
# Add logging middleware
|
|
logger.info("Adding request logging middleware")
|
|
app.add_middleware(LoggingMiddleware, log_requests=True, log_responses=settings.debug)
|
|
|
|
# Register global exception handlers
|
|
logger.info("Registering global exception handlers")
|
|
register_exception_handlers(app)
|
|
|
|
# Configure CORS
|
|
logger.info("Configuring CORS middleware")
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"], # Configure appropriately for production
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# Mount static files
|
|
logger.info("Mounting static file directories")
|
|
app.mount("/static", StaticFiles(directory="static"), name="static")
|
|
app.mount("/uploads", StaticFiles(directory="uploads"), name="uploads")
|
|
|
|
# Templates
|
|
logger.info("Initializing Jinja2 templates")
|
|
templates = Jinja2Templates(directory="templates")
|
|
|
|
# Include routers
|
|
from app.api.auth import router as auth_router
|
|
from app.api.customers import router as customers_router
|
|
from app.api.files import router as files_router
|
|
from app.api.financial import router as financial_router
|
|
from app.api.documents import router as documents_router
|
|
from app.api.search import router as search_router
|
|
from app.api.admin import router as admin_router
|
|
from app.api.import_data import router as import_router
|
|
from app.api.support import router as support_router
|
|
from app.api.settings import router as settings_router
|
|
|
|
logger.info("Including API routers")
|
|
app.include_router(auth_router, prefix="/api/auth", tags=["authentication"])
|
|
app.include_router(customers_router, prefix="/api/customers", tags=["customers"])
|
|
app.include_router(files_router, prefix="/api/files", tags=["files"])
|
|
app.include_router(financial_router, prefix="/api/financial", tags=["financial"])
|
|
app.include_router(documents_router, prefix="/api/documents", tags=["documents"])
|
|
app.include_router(search_router, prefix="/api/search", tags=["search"])
|
|
app.include_router(admin_router, prefix="/api/admin", tags=["admin"])
|
|
app.include_router(import_router, prefix="/api/import", tags=["import"])
|
|
app.include_router(support_router, prefix="/api/support", tags=["support"])
|
|
app.include_router(settings_router, prefix="/api/settings", tags=["settings"])
|
|
|
|
|
|
@app.get("/", response_class=HTMLResponse)
|
|
async def root(request: Request):
|
|
"""Main application - redirect to login"""
|
|
return templates.TemplateResponse(
|
|
"login.html",
|
|
{"request": request, "title": "Login - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/login", response_class=HTMLResponse)
|
|
async def login_page(request: Request):
|
|
"""Login page"""
|
|
return templates.TemplateResponse(
|
|
"login.html",
|
|
{"request": request, "title": "Login - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/customers", response_class=HTMLResponse)
|
|
async def customers_page(request: Request):
|
|
"""Customer management page"""
|
|
return templates.TemplateResponse(
|
|
"customers.html",
|
|
{"request": request, "title": "Customers - " + settings.app_name}
|
|
)
|
|
|
|
|
|
|
|
|
|
@app.get("/files", response_class=HTMLResponse)
|
|
async def files_page(request: Request):
|
|
"""File cabinet management page"""
|
|
return templates.TemplateResponse(
|
|
"files.html",
|
|
{"request": request, "title": "File Cabinet - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/financial", response_class=HTMLResponse)
|
|
async def financial_page(request: Request):
|
|
"""Financial/Ledger management page"""
|
|
return templates.TemplateResponse(
|
|
"financial.html",
|
|
{"request": request, "title": "Financial/Ledger - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/documents", response_class=HTMLResponse)
|
|
async def documents_page(request: Request):
|
|
"""Document management page"""
|
|
return templates.TemplateResponse(
|
|
"documents.html",
|
|
{"request": request, "title": "Document Management - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/search", response_class=HTMLResponse)
|
|
async def search_page(request: Request):
|
|
"""Advanced search page"""
|
|
return templates.TemplateResponse(
|
|
"search.html",
|
|
{"request": request, "title": "Advanced Search - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/admin", response_class=HTMLResponse)
|
|
async def admin_page(request: Request):
|
|
"""System administration page (admin only)"""
|
|
return templates.TemplateResponse(
|
|
"admin.html",
|
|
{"request": request, "title": "System Administration - " + settings.app_name}
|
|
)
|
|
|
|
|
|
@app.get("/health")
|
|
async def health_check():
|
|
"""Health check endpoint"""
|
|
return {"status": "healthy", "version": settings.app_version}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run(app, host="0.0.0.0", port=8000, reload=settings.debug) |