市场目录支持 region 过滤(tags_json LIKE,如 yunnan-opc 专区标记)
This commit is contained in:
@@ -80,7 +80,7 @@ async def market_overview(db: Database = Depends(get_db)):
|
||||
@router.get("/items", summary="目录列表(仅 published,游客可访问)")
|
||||
async def market_items(
|
||||
item_type: str | None = None,
|
||||
q: str = "", category: str = "", featured: int = 0,
|
||||
q: str = "", category: str = "", featured: int = 0, region: str = "",
|
||||
page: int = 1, page_size: int = 50,
|
||||
db: Database = Depends(get_db),
|
||||
user: dict | None = Depends(optional_current_user),
|
||||
@@ -89,7 +89,7 @@ async def market_items(
|
||||
raise HTTPException(status_code=400, detail="item_type 仅支持 skill/plugin/app")
|
||||
data = await service.list_items(
|
||||
db, item_type=item_type, q=q, category=category,
|
||||
featured_only=bool(featured), status="published",
|
||||
featured_only=bool(featured), region=region, status="published",
|
||||
page=page, page_size=page_size,
|
||||
)
|
||||
if user:
|
||||
|
||||
@@ -80,9 +80,10 @@ def _order_view(o: MarketPurchaseOrder) -> dict:
|
||||
# ===========================================================================
|
||||
async def list_items(db, *, item_type: str | None = None, q: str = "",
|
||||
category: str = "", featured_only: bool = False,
|
||||
region: str = "",
|
||||
status: str = "published", page: int = 1, page_size: int = 50,
|
||||
mine: bool = False) -> dict:
|
||||
"""目录列表。status 传空串 = 全状态(管理端用)。"""
|
||||
"""目录列表。status 传空串 = 全状态(管理端用)。region 按 tags_json 过滤(专区标记,如 yunnan-opc)。"""
|
||||
stmt = select(MarketItem).order_by(MarketItem.is_featured.desc(), MarketItem.created_at.desc())
|
||||
if item_type:
|
||||
stmt = stmt.where(MarketItem.item_type == item_type)
|
||||
@@ -92,6 +93,8 @@ async def list_items(db, *, item_type: str | None = None, q: str = "",
|
||||
stmt = stmt.where(MarketItem.category == category)
|
||||
if featured_only:
|
||||
stmt = stmt.where(MarketItem.is_featured == 1)
|
||||
if region:
|
||||
stmt = stmt.where(MarketItem.tags_json.like(f"%{region}%"))
|
||||
if q:
|
||||
like = f"%{q}%"
|
||||
stmt = stmt.where((MarketItem.name.like(like)) | (MarketItem.description.like(like)) | (MarketItem.slug.like(like)))
|
||||
|
||||
Reference in New Issue
Block a user