"""法规浏览 API — /api/laws, /api/law/{law_id}""" from fastapi import APIRouter, Request, HTTPException, Query from typing import Optional from app.services.law_reader import LawReader from app.config import BROWSE_PAGE_SIZE router = APIRouter() @router.get("/laws") async def list_laws( request: Request, category: Optional[str] = Query(None, description="法规类别过滤"), province: Optional[str] = Query(None, description="省份过滤"), keyword: Optional[str] = Query(None, description="法规名关键词"), page: int = Query(1, ge=1, description="页码"), page_size: int = Query(BROWSE_PAGE_SIZE, ge=1, le=200, description="每页数量"), ): """法规列表(分页 + 过滤)""" trace_id = getattr(request.state, "trace_id", "") reader = LawReader.get_instance() result = reader.list_laws( category=category, province=province, keyword=keyword, page=page, page_size=page_size, ) return { "code": 0, "message": "ok", "data": result, "trace_id": trace_id, } @router.get("/law/{law_id}") async def get_law(law_id: int, request: Request): """法规详情(含原文 + 条文列表)""" trace_id = getattr(request.state, "trace_id", "") reader = LawReader.get_instance() detail = reader.get_law(law_id) if detail is None: raise HTTPException(status_code=404, detail="法规不存在") return { "code": 0, "message": "ok", "data": detail, "trace_id": trace_id, }