import uvicorn from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.gzip import GZipMiddleware from fastapi.staticfiles import StaticFiles from routers import auth, user, dashboard, medicine, session, analysis from routers import ai_agent from routers import preorder, admin, contact, subscription, device, caregiver, health_record, health_detection, cron, chatbot from utils.reminders import reminder_worker import asyncio app = FastAPI( title="AI-Powered Medicine Dispenser System", description="Backend API for medicine scheduling, reminders, and user management.", version="1.0.0" ) # app.mount("/uploads", StaticFiles(directory="uploads"), name="uploads") # Cloudinary used instead # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=[ "http://localhost:3000", "https://app.medisync-ai.site", "https://medisync-ai.site", "https://anique-1-medisync.hf.space", ], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # GZip middleware app.add_middleware(GZipMiddleware, minimum_size=1000) @app.middleware("http") async def log_requests(request: Request, call_next): import sys print(f"Incoming Request: {request.method} {request.url}") sys.stdout.flush() response = await call_next(request) return response @app.get("/") async def root(): return {"message": "MediSync AI API is running", "status": "optimal"} # Include routers app.include_router(auth.router) app.include_router(user.router) app.include_router(user.public_router) app.include_router(dashboard.router) app.include_router(medicine.router) app.include_router(session.router) app.include_router(analysis.router) app.include_router(ai_agent.router) app.include_router(preorder.router) app.include_router(admin.router) app.include_router(contact.router) app.include_router(subscription.router) app.include_router(device.router) app.include_router(caregiver.router) app.include_router(health_record.router) app.include_router(health_detection.router) app.include_router(cron.router) app.include_router(chatbot.router) @app.on_event("startup") async def startup_event(): # Start reminder background tasks loop = asyncio.get_event_loop() from utils.reminders import reminder_worker, mark_missed_doses_worker loop.create_task(reminder_worker()) loop.create_task(mark_missed_doses_worker()) if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)