"""HTTP boundary for the Internal Alpha Miner Detail overview.""" from typing import Annotated from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Response, status from app.identity import require_permission, user_has_permission from app.inventory.exceptions import MinerNotFound from app.miner_detail.dependencies import get_miner_detail_service from app.miner_detail.models import ( MinerDetailAccess, MinerDetailOverviewResponse, ) from app.miner_detail.service import MinerDetailService router = APIRouter(prefix="/api/miners", tags=["miners"]) MinerDetailUser = Annotated[dict, Depends(require_permission("miners.view"))] MinerDetailServiceDependency = Annotated[ MinerDetailService, Depends(get_miner_detail_service), ] @router.get( "/{miner_id}/overview", response_model=MinerDetailOverviewResponse, ) def get_miner_detail_overview( miner_id: UUID, current_user: MinerDetailUser, service: MinerDetailServiceDependency, response: Response, ) -> MinerDetailOverviewResponse: response.headers["Cache-Control"] = "no-store" try: return service.get_overview( miner_id, MinerDetailAccess( can_view_locations=user_has_permission( current_user, "locations.view" ), can_read_repairs=user_has_permission( current_user, "repairs.read" ), can_view_repairs=user_has_permission( current_user, "repairs.view" ), can_read_components=user_has_permission( current_user, "components.read" ), ), ) except MinerNotFound as exc: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Miner not found", ) from exc