fix:修复提示词工坊公开接口验证逻辑 4
This commit is contained in:
@@ -258,8 +258,10 @@ async def _get_items_local(
|
||||
|
||||
|
||||
@router.get("/items/{item_id}")
|
||||
async def get_item(item_id: str, db: AsyncSession = Depends(get_db)):
|
||||
async def get_item(item_id: str, request: Request, db: AsyncSession = Depends(get_db)):
|
||||
"""获取单个提示词详情"""
|
||||
user_identifier = get_optional_user_identifier(request)
|
||||
|
||||
if is_workshop_server():
|
||||
result = await db.execute(
|
||||
select(PromptWorkshopItem).where(
|
||||
@@ -273,7 +275,7 @@ async def get_item(item_id: str, db: AsyncSession = Depends(get_db)):
|
||||
return {"success": True, "data": _item_to_dict(item)}
|
||||
else:
|
||||
try:
|
||||
return await workshop_client.get_item(item_id)
|
||||
return await workshop_client.get_item(item_id, user_identifier=user_identifier)
|
||||
except WorkshopClientError as e:
|
||||
raise HTTPException(status_code=503, detail=str(e))
|
||||
|
||||
@@ -305,7 +307,7 @@ async def import_item(
|
||||
else:
|
||||
# 从云端获取
|
||||
try:
|
||||
result = await workshop_client.get_item(item_id)
|
||||
result = await workshop_client.get_item(item_id, user_identifier=user_identifier)
|
||||
item_data = result.get("data", result)
|
||||
|
||||
# 通知云端增加下载计数
|
||||
|
||||
+22
-5
@@ -128,17 +128,34 @@ config_logger.debug(f"AI提供商: {settings.default_ai_provider}")
|
||||
# ==================== 提示词工坊实例标识 ====================
|
||||
|
||||
def get_or_create_instance_id() -> str:
|
||||
"""获取或创建实例唯一标识"""
|
||||
"""获取或创建实例唯一标识
|
||||
|
||||
- Server 模式:固定使用 "server" 作为标识,确保与所有 Client 实例区分
|
||||
- Client 模式:从 .instance_id 文件读取或自动生成唯一标识
|
||||
"""
|
||||
# Server 模式使用固定标识
|
||||
if settings.WORKSHOP_MODE.lower() == "server":
|
||||
config_logger.info("Server 模式:使用固定实例标识 'server'")
|
||||
return "server"
|
||||
|
||||
# Client 模式:从文件读取或生成
|
||||
instance_file = PROJECT_ROOT / ".instance_id"
|
||||
if instance_file.exists():
|
||||
with open(instance_file, 'r') as f:
|
||||
return f.read().strip()
|
||||
else:
|
||||
instance_id = str(uuid.uuid4())[:12]
|
||||
instance_id = f.read().strip()
|
||||
if instance_id and instance_id != "server": # 确保不与 server 冲突
|
||||
return instance_id
|
||||
|
||||
# 生成新的实例ID
|
||||
instance_id = str(uuid.uuid4())[:12]
|
||||
try:
|
||||
with open(instance_file, 'w') as f:
|
||||
f.write(instance_id)
|
||||
config_logger.info(f"生成新的实例标识: {instance_id}")
|
||||
return instance_id
|
||||
except Exception as e:
|
||||
config_logger.warning(f"无法保存实例标识到文件: {e}")
|
||||
|
||||
return instance_id
|
||||
|
||||
INSTANCE_ID = get_or_create_instance_id()
|
||||
|
||||
|
||||
@@ -99,9 +99,9 @@ class WorkshopClient:
|
||||
user_identifier=user_identifier
|
||||
)
|
||||
|
||||
async def get_item(self, item_id: str) -> Dict:
|
||||
async def get_item(self, item_id: str, user_identifier: Optional[str] = None) -> Dict:
|
||||
"""获取单个提示词详情"""
|
||||
return await self._request("GET", f"/items/{item_id}")
|
||||
return await self._request("GET", f"/items/{item_id}", user_identifier=user_identifier)
|
||||
|
||||
async def record_download(self, item_id: str, user_identifier: str) -> Dict:
|
||||
"""记录下载"""
|
||||
@@ -111,7 +111,8 @@ class WorkshopClient:
|
||||
json={
|
||||
"instance_id": INSTANCE_ID,
|
||||
"user_identifier": user_identifier
|
||||
}
|
||||
},
|
||||
user_identifier=user_identifier
|
||||
)
|
||||
|
||||
async def toggle_like(self, item_id: str, user_identifier: str) -> Dict:
|
||||
|
||||
Reference in New Issue
Block a user