""" api.mebboat.it/marine/datasets/* """ import os from typing import Optional import httpx from fastapi import APIRouter, Depends, HTTPException, Query from middleware.auth import require_auth router = APIRouter(prefix="/datasets", tags=["datasets"]) API_URL = os.getenv("API_SERVICE_URL", "http://api-service:3003") def _auth_headers(user: dict) -> dict: return {"Authorization": f"Bearer {user['token']}"} @router.get("") async def list_datasets( tags: Optional[str] = Query(None), user=Depends(require_auth) ): async with httpx.AsyncClient(timeout=10.0) as client: r = await client.get( f"{API_URL}/marine/datasets", params={"tags": tags} if tags else {}, headers=_auth_headers(user), ) if not r.is_success: raise HTTPException(status_code=r.status_code, detail=r.json().get("error", "Upstream error")) return r.json() @router.get("/{dataset_id}/download") async def download_dataset(dataset_id: str, user=Depends(require_auth)): async with httpx.AsyncClient(timeout=10.0) as client: r = await client.get( f"{API_URL}/marine/datasets/{dataset_id}/download", headers=_auth_headers(user), ) if not r.is_success: raise HTTPException(status_code=r.status_code, detail=r.json().get("error", "Upstream error")) return r.json() @router.delete("/{dataset_id}") async def delete_dataset(dataset_id: str, user=Depends(require_auth)): async with httpx.AsyncClient(timeout=10.0) as client: r = await client.delete( f"{API_URL}/marine/datasets/{dataset_id}", headers=_auth_headers(user), ) if not r.is_success: raise HTTPException(status_code=r.status_code, detail=r.json().get("error", "Upstream error")) return r.json()