Spaces:
Sleeping
Sleeping
File size: 2,931 Bytes
9bc686b | 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 | import os
from fastapi import FastAPI, Depends
from fastapi.middleware.cors import CORSMiddleware
import logging
from app.core.config import settings
from app.core.database import SessionLocal
from app.core.init_db import init_db
from app.api.v1 import auth, employees, departments, enrollment, kiosk, attendance, reports, analytics, settings as settings_api, audit
# Logging configuration
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
logger = logging.getLogger("NetraID")
from fastapi.staticfiles import StaticFiles
app = FastAPI(
title=settings.PROJECT_NAME,
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc"
)
# Mount uploads directory as static files
app.mount("/uploads", StaticFiles(directory=settings.UPLOAD_DIR), name="uploads")
# CORS configuration
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Create folders on startup
@app.on_event("startup")
def startup_event():
logger.info("Starting NetraID Backend...")
# Create upload directory
os.makedirs(settings.UPLOAD_DIR, exist_ok=True)
logger.info(f"Uploads directory verified: {settings.UPLOAD_DIR}")
# Create models directory
os.makedirs(settings.MODELS_DIR, exist_ok=True)
logger.info(f"Models directory verified: {settings.MODELS_DIR}")
# Initialize and Seed database
db = SessionLocal()
try:
init_db(db)
except Exception as e:
logger.error(f"Error seeding database: {e}")
finally:
db.close()
# Health check
@app.get("/health", tags=["Status"])
def health_check():
return {
"status": "healthy",
"project": settings.PROJECT_NAME,
"version": "1.0.0"
}
# Include API Routers
app.include_router(auth.router, prefix=f"{settings.API_V1_STR}/auth", tags=["Authentication"])
app.include_router(employees.router, prefix=f"{settings.API_V1_STR}/employees", tags=["Employee Management"])
app.include_router(departments.router, prefix=f"{settings.API_V1_STR}/departments", tags=["Department Management"])
app.include_router(enrollment.router, prefix=f"{settings.API_V1_STR}/enrollment", tags=["Face Enrollment"])
app.include_router(kiosk.router, prefix=f"{settings.API_V1_STR}/kiosk", tags=["Kiosk Attendance Screen"])
app.include_router(attendance.router, prefix=f"{settings.API_V1_STR}/attendance", tags=["Attendance Logs & Feeds"])
app.include_router(reports.router, prefix=f"{settings.API_V1_STR}/reports", tags=["Reporting & Exports"])
app.include_router(analytics.router, prefix=f"{settings.API_V1_STR}/analytics", tags=["Dashboard Analytics"])
app.include_router(settings_api.router, prefix=f"{settings.API_V1_STR}/settings", tags=["System Settings"])
app.include_router(audit.router, prefix=f"{settings.API_V1_STR}/audit", tags=["System Audit Logs"])
|