chore: resolve WIP after merging internal/development

- .gitignore: keep api/uploads ignore and copyright_source_listing.pdf path

- auth: keep COS avatar upload URL; delete prior COS object when applying preset

- i18n: regenerate resources.ts (includes profile tapAwayToClose)

- Avatar/COS tests and personal-info remain from prior local work

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin
2026-05-18 15:34:50 +08:00
parent 98802240ac
commit eabda2c6a9
12 changed files with 350 additions and 97 deletions

View File

@@ -14,6 +14,9 @@ logger = get_logger(__name__)
# 客户端再读 TTS / 拉取音频:预签名有效期(秒),与移动端会话长度匹配
TTS_PRESIGNED_EXPIRES_SEC = 86_400
# 用户头像 API 下发(与 TTS 一致)
AVATAR_PRESIGNED_EXPIRES_SEC = TTS_PRESIGNED_EXPIRES_SEC
def extract_cos_object_key_if_owned(url: str | None) -> str | None:
"""
@@ -119,3 +122,50 @@ def presign_tts_urls_for_playback(
else:
out.append(s)
return out
def avatar_url_for_api_response(stored_url: str | None) -> str | None:
"""DB 中的头像 URL本环境 COS 直链改为预签名下载 URL。"""
if stored_url is None:
return None
s = str(stored_url).strip()
if not s:
return None
key = extract_cos_object_key_if_owned(s)
if not key:
return s
if not (
(settings.tencent_cos_secret_id or "").strip()
and (settings.tencent_cos_bucket or "").strip()
):
return s
from app.core.dependencies import get_object_storage
storage = get_object_storage()
try:
return storage.get_url(key, expires=AVATAR_PRESIGNED_EXPIRES_SEC)
except Exception as exc:
logger.warning(
"presign avatar url failed, keeping original: key={} err={}",
key,
exc,
)
return s
def best_effort_delete_cos_object_for_url(url: str | None) -> None:
"""本环境 COS 对象则尽力 delete换头像 / 预设时清理)。"""
key = extract_cos_object_key_if_owned(url)
if not key:
return
if not (
(settings.tencent_cos_secret_id or "").strip()
and (settings.tencent_cos_bucket or "").strip()
):
return
from app.core.dependencies import get_object_storage
try:
get_object_storage().delete(key)
except Exception as exc:
logger.warning("delete cos avatar object failed: key={} err={}", key, exc)