ZHIWEI666 commited on
Commit
9c86741
·
verified ·
1 Parent(s): 4999663

保持下载量数据

Browse files
Files changed (1) hide show
  1. 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
  # ==========================================