mines.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from __future__ import annotations
  2. from fastapi import APIRouter, Depends, Query
  3. from sqlalchemy.orm import Session
  4. from app.db.repositories import mine as mine_repo
  5. from app.db.repositories.base import create_model
  6. from app.db.session import get_db
  7. from app.schemas.common import MessageResponse
  8. from app.schemas.mine import (
  9. MineAreaRead,
  10. MineCreate,
  11. MineRead,
  12. RoadwayRead,
  13. WorkFaceRead,
  14. )
  15. from app.services.mine_service import require_mine
  16. router = APIRouter(prefix="/mines", tags=["矿井与空间对象"])
  17. @router.get("", response_model=list[MineRead], summary="矿井列表")
  18. def list_mines(
  19. include_inactive: bool = Query(False),
  20. db: Session = Depends(get_db),
  21. ) -> list:
  22. return mine_repo.list_mines(db, include_inactive=include_inactive)
  23. @router.post("", response_model=MineRead, status_code=201, summary="新增矿井")
  24. def create_mine(payload: MineCreate, db: Session = Depends(get_db)):
  25. return create_model(db, mine_repo.Mine, payload.model_dump())
  26. @router.get("/{mine_id}", response_model=MineRead, summary="矿井详情")
  27. def get_mine(mine_id: str, db: Session = Depends(get_db)):
  28. return require_mine(db, mine_id)
  29. @router.get("/{mine_id}/areas", response_model=list[MineAreaRead], summary="采区列表")
  30. def list_areas(mine_id: str, db: Session = Depends(get_db)):
  31. require_mine(db, mine_id)
  32. return mine_repo.list_areas(db, mine_id)
  33. @router.get(
  34. "/{mine_id}/work-faces",
  35. response_model=list[WorkFaceRead],
  36. summary="工作面列表",
  37. )
  38. def list_work_faces(mine_id: str, db: Session = Depends(get_db)):
  39. require_mine(db, mine_id)
  40. return mine_repo.list_work_faces(db, mine_id)
  41. @router.get(
  42. "/{mine_id}/roadways",
  43. response_model=list[RoadwayRead],
  44. summary="巷道列表",
  45. )
  46. def list_roadways(mine_id: str, db: Session = Depends(get_db)):
  47. require_mine(db, mine_id)
  48. return mine_repo.list_roadways(db, mine_id)