Spaces:
Running
Running
保持下载量数据
Browse files- router_items.py +40 -0
router_items.py
CHANGED
|
@@ -397,6 +397,46 @@ async def record_item_view(item_id: str, current_user: str = Depends(require_aut
|
|
| 397 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
| 398 |
|
| 399 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 400 |
# ==========================================
|
| 401 |
# ❤️ 互动接口(点赞/收藏)
|
| 402 |
# ==========================================
|
|
|
|
| 397 |
return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
|
| 398 |
|
| 399 |
|
| 400 |
+
@router.post("/api/items/{item_id}/use")
|
| 401 |
+
async def record_item_use(item_id: str, current_user: str = Depends(require_auth)):
|
| 402 |
+
"""
|
| 403 |
+
记录资源使用量/下载量(原子操作,并发安全)
|
| 404 |
+
📥 每个用户对同一资源只计一次,防止重复计数
|
| 405 |
+
"""
|
| 406 |
+
result_container = [None]
|
| 407 |
+
current_month = datetime.date.today().strftime("%Y-%m")
|
| 408 |
+
|
| 409 |
+
def updater(data):
|
| 410 |
+
for item in data:
|
| 411 |
+
if item["id"] == item_id:
|
| 412 |
+
used_by = item.get("used_by", [])
|
| 413 |
+
if current_user in used_by:
|
| 414 |
+
# 用户已使用过,不重复计数
|
| 415 |
+
result_container[0] = {"status": "success", "action": "already_used", "uses": item.get("uses", 0)}
|
| 416 |
+
return
|
| 417 |
+
# 首次使用,增加计数
|
| 418 |
+
used_by.append(current_user)
|
| 419 |
+
item["uses"] = item.get("uses", 0) + 1
|
| 420 |
+
# 更新月度使用历史
|
| 421 |
+
use_history = item.get("use_history", {})
|
| 422 |
+
use_history[current_month] = use_history.get(current_month, 0) + 1
|
| 423 |
+
item["use_history"] = use_history
|
| 424 |
+
item["used_by"] = used_by
|
| 425 |
+
result_container[0] = {"status": "success", "action": "recorded", "uses": item["uses"]}
|
| 426 |
+
return
|
| 427 |
+
result_container[0] = None # 未找到资源
|
| 428 |
+
|
| 429 |
+
db.atomic_update("items.json", updater, default_data=[])
|
| 430 |
+
|
| 431 |
+
if result_container[0] is None:
|
| 432 |
+
raise HTTPException(status_code=404, detail="资源不存在")
|
| 433 |
+
|
| 434 |
+
# 🗂️ 清除排序缓存(使用数变化可能影响排序)
|
| 435 |
+
sort_cache.invalidate("items:")
|
| 436 |
+
|
| 437 |
+
return result_container[0]
|
| 438 |
+
|
| 439 |
+
|
| 440 |
# ==========================================
|
| 441 |
# ❤️ 互动接口(点赞/收藏)
|
| 442 |
# ==========================================
|