修復版本發布功能中遺漏的 version_db 引用
Browse files修正 version_routes.py 中檔案上傳功能,
使用 supabase_clients 統一管理連接
- app/api/version_routes.py +14 -1
- app/models/supabase_clients.py +8 -4
app/api/version_routes.py
CHANGED
|
@@ -216,7 +216,20 @@ async def release_version(
|
|
| 216 |
}
|
| 217 |
content_type = content_types.get(file_extension, 'application/octet-stream')
|
| 218 |
|
| 219 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 220 |
|
| 221 |
elif not download_url:
|
| 222 |
raise HTTPException(status_code=400, detail="Must provide either file or download URL")
|
|
|
|
| 216 |
}
|
| 217 |
content_type = content_types.get(file_extension, 'application/octet-stream')
|
| 218 |
|
| 219 |
+
# 使用 Supabase Storage 上傳檔案
|
| 220 |
+
try:
|
| 221 |
+
client = supabase_clients.get_version_client()
|
| 222 |
+
storage_result = client.storage.from_('plugin-releases').upload(file_path, file_content, {
|
| 223 |
+
'content-type': content_type,
|
| 224 |
+
'x-upsert': 'true'
|
| 225 |
+
})
|
| 226 |
+
|
| 227 |
+
# 產生公開下載連結
|
| 228 |
+
final_download_url = client.storage.from_('plugin-releases').get_public_url(file_path)
|
| 229 |
+
|
| 230 |
+
except Exception as e:
|
| 231 |
+
logger.error(f"Storage upload error: {e}")
|
| 232 |
+
raise HTTPException(status_code=500, detail=f"檔案上傳失敗: {str(e)}")
|
| 233 |
|
| 234 |
elif not download_url:
|
| 235 |
raise HTTPException(status_code=400, detail="Must provide either file or download URL")
|
app/models/supabase_clients.py
CHANGED
|
@@ -67,22 +67,26 @@ class SupabaseClients:
|
|
| 67 |
|
| 68 |
def get_license_client(self) -> Optional[Client]:
|
| 69 |
"""取得授權系統的 Supabase 客戶端"""
|
| 70 |
-
self.
|
|
|
|
| 71 |
return self.license_client
|
| 72 |
|
| 73 |
def get_version_client(self) -> Optional[Client]:
|
| 74 |
"""取得版本系統的 Supabase 客戶端"""
|
| 75 |
-
self.
|
|
|
|
| 76 |
return self.version_client
|
| 77 |
|
| 78 |
def is_license_connected(self) -> bool:
|
| 79 |
"""檢查授權系統是否連接成功"""
|
| 80 |
-
self.
|
|
|
|
| 81 |
return self.license_client is not None
|
| 82 |
|
| 83 |
def is_version_connected(self) -> bool:
|
| 84 |
"""檢查版本系統是否連接成功"""
|
| 85 |
-
self.
|
|
|
|
| 86 |
return self.version_client is not None
|
| 87 |
|
| 88 |
def verify_connections(self) -> dict:
|
|
|
|
| 67 |
|
| 68 |
def get_license_client(self) -> Optional[Client]:
|
| 69 |
"""取得授權系統的 Supabase 客戶端"""
|
| 70 |
+
if not self._license_initialized:
|
| 71 |
+
self._initialize_license_client()
|
| 72 |
return self.license_client
|
| 73 |
|
| 74 |
def get_version_client(self) -> Optional[Client]:
|
| 75 |
"""取得版本系統的 Supabase 客戶端"""
|
| 76 |
+
if not self._version_initialized:
|
| 77 |
+
self._initialize_version_client()
|
| 78 |
return self.version_client
|
| 79 |
|
| 80 |
def is_license_connected(self) -> bool:
|
| 81 |
"""檢查授權系統是否連接成功"""
|
| 82 |
+
if not self._license_initialized:
|
| 83 |
+
self._initialize_license_client()
|
| 84 |
return self.license_client is not None
|
| 85 |
|
| 86 |
def is_version_connected(self) -> bool:
|
| 87 |
"""檢查版本系統是否連接成功"""
|
| 88 |
+
if not self._version_initialized:
|
| 89 |
+
self._initialize_version_client()
|
| 90 |
return self.version_client is not None
|
| 91 |
|
| 92 |
def verify_connections(self) -> dict:
|