市场目录支持 region 过滤(tags_json LIKE,如 yunnan-opc 专区标记)

This commit is contained in:
Pine
2026-09-05 10:50:18 +08:00
parent 3061ceb2d8
commit 22674fbc63
2 changed files with 6 additions and 3 deletions
+2 -2
View File
@@ -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:
+4 -1
View File
@@ -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)))