ZHIWEI666 commited on
Commit
8e0cd3e
·
verified ·
1 Parent(s): fecd5e7

支持退款功能

Browse files
Files changed (3) hide show
  1. models.py +2 -0
  2. router_items.py +2 -0
  3. router_wallet.py +11 -1
models.py CHANGED
@@ -66,6 +66,7 @@ class ItemCreate(BaseModel):
66
  netdisk_password: Optional[str] = None # ☁️ 网盘提取码(加密存储,购买后解密)
67
  is_netdisk: Optional[bool] = False # ☁️ 是否为网盘资源
68
  is_original: Optional[bool] = False # 🎨 是否为原创作品
 
69
 
70
  class ItemUpdate(BaseModel):
71
  title: Optional[str] = None
@@ -79,6 +80,7 @@ class ItemUpdate(BaseModel):
79
  netdisk_password: Optional[str] = None # ☁️ 网盘提取码
80
  is_netdisk: Optional[bool] = None # ☁️ 是否为网盘资源
81
  is_original: Optional[bool] = None # 🎨 是否为原创作品
 
82
 
83
  class FollowToggle(BaseModel):
84
  user_id: str
 
66
  netdisk_password: Optional[str] = None # ☁️ 网盘提取码(加密存储,购买后解密)
67
  is_netdisk: Optional[bool] = False # ☁️ 是否为网盘资源
68
  is_original: Optional[bool] = False # 🎨 是否为原创作品
69
+ allow_refund: Optional[bool] = True # 💸 是否支持退款(默认支持)
70
 
71
  class ItemUpdate(BaseModel):
72
  title: Optional[str] = None
 
80
  netdisk_password: Optional[str] = None # ☁️ 网盘提取码
81
  is_netdisk: Optional[bool] = None # ☁️ 是否为网盘资源
82
  is_original: Optional[bool] = None # 🎨 是否为原创作品
83
+ allow_refund: Optional[bool] = None # 💸 是否支持退款
84
 
85
  class FollowToggle(BaseModel):
86
  user_id: str
router_items.py CHANGED
@@ -215,6 +215,7 @@ async def create_item(item: ItemCreate):
215
  "netdisk_password": item.netdisk_password, # ☁️ 网盘密码
216
  "is_netdisk": item.is_netdisk, # ☁️ 是否网盘资源
217
  "is_original": item.is_original, # 🎨 是否为原创作品
 
218
  "likes": 0, "favorites": 0, "comments": 0, "uses": 0, "use_history": {}, "created_at": int(time.time()), "liked_by": [], "favorited_by": [],
219
  "views": 0,
220
  "daily_views": 0,
@@ -285,6 +286,7 @@ async def update_item(item_id: str, update_data: ItemUpdate, current_user: str =
285
  if update_data.netdisk_password is not None: item["netdisk_password"] = update_data.netdisk_password # ☁️
286
  if update_data.is_netdisk is not None: item["is_netdisk"] = update_data.is_netdisk # ☁️
287
  if update_data.is_original is not None: item["is_original"] = update_data.is_original # 🎨
 
288
 
289
  result_holder["success"] = True
290
  result_holder["price_change_info"] = price_change_info
 
215
  "netdisk_password": item.netdisk_password, # ☁️ 网盘密码
216
  "is_netdisk": item.is_netdisk, # ☁️ 是否网盘资源
217
  "is_original": item.is_original, # 🎨 是否为原创作品
218
+ "allow_refund": item.allow_refund, # 💸 是否支持退款
219
  "likes": 0, "favorites": 0, "comments": 0, "uses": 0, "use_history": {}, "created_at": int(time.time()), "liked_by": [], "favorited_by": [],
220
  "views": 0,
221
  "daily_views": 0,
 
286
  if update_data.netdisk_password is not None: item["netdisk_password"] = update_data.netdisk_password # ☁️
287
  if update_data.is_netdisk is not None: item["is_netdisk"] = update_data.is_netdisk # ☁️
288
  if update_data.is_original is not None: item["is_original"] = update_data.is_original # 🎨
289
+ if update_data.allow_refund is not None: item["allow_refund"] = update_data.allow_refund # 💸
290
 
291
  result_holder["success"] = True
292
  result_holder["price_change_info"] = price_change_info
router_wallet.py CHANGED
@@ -866,6 +866,11 @@ async def get_purchase_status(account: str, item_id: str, db: Session = Depends(
866
  if not ownership:
867
  return {"status": "success", "owned": False}
868
 
 
 
 
 
 
869
  # 计算是否在退款窗口内
870
  purchased_at = ownership.purchased_at
871
  now = datetime.datetime.utcnow()
@@ -879,7 +884,8 @@ async def get_purchase_status(account: str, item_id: str, db: Session = Depends(
879
  "purchased_at": purchased_at.isoformat(),
880
  "price_paid": ownership.price_paid,
881
  "can_refund": can_refund,
882
- "refund_hours_left": round(hours_left, 1)
 
883
  }
884
 
885
  @router.post("/api/wallet/refund")
@@ -897,6 +903,10 @@ async def refund_purchase(request: Request, account: str, item_id: str, db: Sess
897
  if not item:
898
  raise HTTPException(status_code=404, detail="商品不存在")
899
 
 
 
 
 
900
  # 查找购买记录
901
  ownership = db.query(Ownership).filter(
902
  Ownership.account == account,
 
866
  if not ownership:
867
  return {"status": "success", "owned": False}
868
 
869
+ # 读取商品,获取 allow_refund(旧数据默认 True)
870
+ items_db = json_db.load_data("items.json", default_data=[])
871
+ item = next((i for i in items_db if i.get("id") == item_id), None)
872
+ allow_refund = item.get("allow_refund", True) if item else True
873
+
874
  # 计算是否在退款窗口内
875
  purchased_at = ownership.purchased_at
876
  now = datetime.datetime.utcnow()
 
884
  "purchased_at": purchased_at.isoformat(),
885
  "price_paid": ownership.price_paid,
886
  "can_refund": can_refund,
887
+ "refund_hours_left": round(hours_left, 1),
888
+ "allow_refund": allow_refund
889
  }
890
 
891
  @router.post("/api/wallet/refund")
 
903
  if not item:
904
  raise HTTPException(status_code=404, detail="商品不存在")
905
 
906
+ # 检查资源是否支持退款
907
+ if not item.get("allow_refund", True): # 默认支持退款(向后兼容)
908
+ raise HTTPException(status_code=400, detail="该资源不支持退款")
909
+
910
  # 查找购买记录
911
  ownership = db.query(Ownership).filter(
912
  Ownership.account == account,