| |
| """ |
| 缓存管理 API 端点 |
| """ |
| import logging |
| from typing import List, Dict, Any, Optional |
|
|
| from fastapi import APIRouter, Depends, HTTPException, status, Request |
| from sqlalchemy.orm import Session |
| |
| from app.core.dependencies import get_db_session |
| from app.core.cache.manager import CacheManager |
| from app.core.database.models import CachedContent |
| from app.api.models import CacheEntryResponse |
| import os |
|
|
| |
| logger = logging.getLogger('my_logger') |
|
|
| router = APIRouter() |
|
|
| |
| |
| |
| |
| async def get_current_user_id(request: Request) -> str: |
| """ |
| 模拟获取当前用户 ID 的依赖函数。 |
| 实际应用中需要根据认证方式实现。 |
| """ |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| user_id = request.query_params.get("user_id") |
| if not user_id: |
| |
| |
| raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="需要提供 user_id 参数") |
| return user_id |
|
|
|
|
| @router.get("/v1/caches", response_model=List[CacheEntryResponse]) |
| async def list_user_caches( |
| user_id: str = Depends(get_current_user_id), |
| db: Session = Depends(get_db_session), |
| cache_manager: CacheManager = Depends(CacheManager) |
| ): |
| """ |
| 列出当前用户的所有缓存条目。 |
| """ |
| logger.info(f"接收到列出用户 {user_id} 缓存的请求") |
| try: |
| |
| |
| |
| |
| |
| caches = db.query(CachedContent).filter(CachedContent.user_id == user_id).all() |
|
|
| |
| response_data = [ |
| CacheEntryResponse( |
| id=cache.id, |
| gemini_cache_id=cache.gemini_cache_id, |
| content_hash=cache.content_hash, |
| api_key_id=cache.api_key_id, |
| created_at=cache.created_at, |
| expires_at=cache.expires_at, |
| last_used_at=cache.last_used_at, |
| usage_count=cache.usage_count, |
| |
| |
| ) for cache in caches |
| ] |
|
|
| logger.info(f"成功获取用户 {user_id} 的 {len(caches)} 个缓存条目") |
| return response_data |
|
|
| except Exception as e: |
| logger.error(f"列出用户 {user_id} 缓存时发生错误: {e}", exc_info=True) |
| raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="获取缓存列表失败") |
|
|
|
|
| @router.delete("/v1/caches/{cache_id}") |
| async def delete_user_cache( |
| cache_id: int, |
| user_id: str = Depends(get_current_user_id), |
| db: Session = Depends(get_db_session), |
| cache_manager: CacheManager = Depends(CacheManager) |
| ): |
| """ |
| 删除指定 ID 的缓存条目。 |
| """ |
| logger.info(f"接收到删除用户 {user_id} 的缓存 {cache_id} 的请求") |
| try: |
| |
| cache_entry = db.query(CachedContent).filter( |
| CachedContent.id == cache_id, |
| CachedContent.user_id == user_id |
| ).first() |
|
|
| if not cache_entry: |
| logger.warning(f"用户 {user_id} 尝试删除不存在或不属于自己的缓存 {cache_id}") |
| raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="缓存条目未找到或不属于当前用户") |
|
|
| |
| success = await cache_manager.delete_cache(db, cache_id) |
|
|
| if success: |
| logger.info(f"成功删除用户 {user_id} 的缓存 {cache_id}") |
| return {"message": f"缓存条目 {cache_id} 删除成功"} |
| else: |
| logger.error(f"删除用户 {user_id} 的缓存 {cache_id} 失败 (CacheManager 返回 False)") |
| raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="删除缓存失败") |
|
|
| except HTTPException: |
| |
| raise |
| except Exception as e: |
| logger.error(f"删除用户 {user_id} 的缓存 {cache_id} 时发生错误: {e}", exc_info=True) |
| raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="删除缓存失败") |
|
|
| |
|
|