from fastapi import APIRouter, Depends, HTTPException from datetime import datetime from app.api.deps import get_db from app.models.project import Project, CoverageSettings from app.models.site import Site router = APIRouter() @router.get("/current") async def get_current_project(db=Depends(get_db)): """Get the global project.""" project = await db.projects.find_one({"name": "global"}) if not project: default = Project(name="global") result = await db.projects.insert_one(default.model_dump()) return default.model_dump() project.pop("_id", None) return project @router.put("/current") async def update_current_project(project: Project, db=Depends(get_db)): """Update the global project.""" project.updated_at = datetime.utcnow() data = project.model_dump() await db.projects.update_one( {"name": "global"}, {"$set": data}, upsert=True, ) return data @router.get("/current/sites") async def get_sites(db=Depends(get_db)): """Get all sites from the global project.""" project = await db.projects.find_one({"name": "global"}) if not project: return [] return project.get("sites", []) @router.put("/current/sites") async def update_sites(sites: list[Site], db=Depends(get_db)): """Update all sites in the global project.""" await db.projects.update_one( {"name": "global"}, { "$set": { "sites": [s.model_dump() for s in sites], "updated_at": datetime.utcnow(), } }, upsert=True, ) return {"updated": len(sites)} @router.get("/current/settings") async def get_settings(db=Depends(get_db)): """Get coverage settings.""" project = await db.projects.find_one({"name": "global"}) if not project: return CoverageSettings().model_dump() return project.get("settings", CoverageSettings().model_dump()) @router.put("/current/settings") async def update_settings(settings: CoverageSettings, db=Depends(get_db)): """Update coverage settings.""" await db.projects.update_one( {"name": "global"}, { "$set": { "settings": settings.model_dump(), "updated_at": datetime.utcnow(), } }, upsert=True, ) return settings.model_dump()