clearance_sys / main.py
Testys's picture
Making more commits
73d94a0
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from datetime import datetime
from fastapi.middleware.cors import CORSMiddleware # Keep if CORS is needed
import uvicorn
from contextlib import asynccontextmanager
from src.database import create_db_and_tables, get_db
from src.routers import students, devices, clearance, token, users, admin
@asynccontextmanager
async def lifespan(app_instance: FastAPI):
"""Handles application startup and shutdown events."""
print("Application startup...")
create_db_and_tables()
print("Database tables checked/created.")
yield
print("Application shutdown...")
# FastAPI app instance
app = FastAPI(
title="Undergraduate Clearance System API",
description="""
A comprehensive API for managing student clearance processes with RFID authentication.
## Features
* RFID Authentication - Students and staff use RFID tags for quick access
* Multi-Department Clearance - Support for Library, Bursary, Alumni, and Departmental clearances
* Device Management - ESP32 RFID readers with secure API key authentication
* Role-Based Access - Different permissions for Students, Staff, and Administrators
* Real-Time Tracking - Live clearance status updates and comprehensive logging
## Authentication Methods
* JWT Tokens - For web interface and administrative access
* RFID Tags - For quick student and staff authentication
* Device API Keys - For ESP32 RFID reader authentication
""",
version="2.0.0",
lifespan=lifespan,
docs_url="/docs",
redoc_url="/redoc",
openapi_url="/openapi.json",
)
app.add_middleware(
CORSMiddleware,
allow_origins= ['*'],
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
)
# Include routers
app.include_router(devices.router)
app.include_router(students.router)
app.include_router(clearance.router)
app.include_router(token.router)
app.include_router(users.router)
app.include_router(admin.router)
# Root endpoint
@app.get("/", summary="Root endpoint", tags=["Default"])
async def read_root():
"""Basic root endpoint to confirm the API is running."""
return {"message": "Undergraduate Clearance System API is running"}
@app.get("/version", summary="API Version Information", tags=["System"])
async def get_version():
"""Get detailed API version information."""
return {
"api_version": "2.0.0",
"last_updated": "2025-06-07",
"features": [
"RFID Authentication",
"Multi-Department Clearance",
"Device Management",
"Real-Time Tracking",
"Comprehensive Logging"
],
"supported_authentication": [
"JWT Tokens",
"RFID Tags",
"Device API Keys"
]
}
# Health check endpoints
@app.get("/health", summary="Health Check", tags=["System"])
async def health_check():
"""Comprehensive health check endpoint."""
health_status = {
"status": "healthy",
"timestamp": datetime.utcnow().isoformat(),
"version": "2.0.0",
"uptime": "calculated_if_needed"
}
status_code = 200
return JSONResponse(
status_code=status_code,
content=health_status
)
# Run the FastAPI app using Uvicorn
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)