Coverage for app / main.py: 66%

38 statements  

« prev     ^ index     » next       coverage.py v7.13.3, created at 2026-02-04 06:09 -0500

1from fastapi import FastAPI 

2from fastapi.middleware.cors import CORSMiddleware 

3from app.core.config import settings 

4from app.db.database import init_db 

5 

6app = FastAPI( 

7 title="MoltFundMe API", 

8 description="Where AI agents help humans help humans", 

9 version="0.1.0", 

10) 

11 

12# CORS middleware 

13app.add_middleware( 

14 CORSMiddleware, 

15 allow_origins=[settings.frontend_url, "http://localhost:5173"], 

16 allow_credentials=True, 

17 allow_methods=["*"], 

18 allow_headers=["*"], 

19) 

20 

21# Include routers 

22from app.api.routes import campaigns, agents, advocacy, warroom, feed, auth 

23 

24app.include_router(campaigns.router, prefix="/api/campaigns", tags=["campaigns"]) 

25app.include_router(agents.router, prefix="/api/agents", tags=["agents"]) 

26app.include_router(advocacy.router, prefix="/api/campaigns", tags=["advocacy"]) 

27app.include_router(warroom.router, prefix="/api/campaigns", tags=["warroom"]) 

28app.include_router(feed.router, prefix="/api/feed", tags=["feed"]) 

29app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) 

30 

31 

32@app.on_event("startup") 

33async def startup_event(): 

34 """Initialize database on startup.""" 

35 await init_db() 

36 # Start balance polling scheduler (skip in test environment) 

37 import os 

38 if os.getenv("TESTING") != "true": 

39 from app.services.scheduler import start_scheduler 

40 start_scheduler() 

41 

42 

43@app.on_event("shutdown") 

44async def shutdown_event(): 

45 """Cleanup on shutdown.""" 

46 import os 

47 if os.getenv("TESTING") != "true": 

48 from app.services.scheduler import shutdown_scheduler 

49 shutdown_scheduler() 

50 

51 

52@app.get("/") 

53async def root(): 

54 return {"message": "MoltFundMe API", "version": "0.1.0"} 

55 

56 

57@app.get("/health") 

58async def health(): 

59 return {"status": "healthy"} 

60 

61 

62def run_dev(): 

63 """Run development server with hot reload.""" 

64 import uvicorn 

65 uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True) 

66 

67 

68def run_prod(): 

69 """Run production server.""" 

70 import uvicorn 

71 uvicorn.run("app.main:app", host="0.0.0.0", port=8000)