Fix stats counting to use ownership-based database queries
- Media: Only count video/image/audio/unknown types, not effects/recipes - Effects: Use database count_user_items instead of filesystem scan - Recipes: Use database count_user_items instead of loading all recipes This ensures stats reflect user ownership via item_types table, and prevents effects from being double-counted as media. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,21 +19,23 @@ router = APIRouter()
|
||||
async def get_user_stats(actor_id: str) -> dict:
|
||||
"""Get stats for a user."""
|
||||
import database
|
||||
from ..services.recipe_service import RecipeService
|
||||
from ..services.run_service import RunService
|
||||
from ..dependencies import get_redis_client, get_cache_manager
|
||||
|
||||
stats = {}
|
||||
|
||||
try:
|
||||
stats["media"] = await database.count_user_items(actor_id)
|
||||
# Count only actual media types (video, image, audio), not effects/recipes
|
||||
media_count = 0
|
||||
for media_type in ["video", "image", "audio", "unknown"]:
|
||||
media_count += await database.count_user_items(actor_id, item_type=media_type)
|
||||
stats["media"] = media_count
|
||||
except Exception:
|
||||
stats["media"] = 0
|
||||
|
||||
try:
|
||||
recipe_service = RecipeService(get_redis_client(), get_cache_manager())
|
||||
recipes = await recipe_service.list_recipes(actor_id)
|
||||
stats["recipes"] = len(recipes)
|
||||
# Count user's recipes from database (ownership-based)
|
||||
stats["recipes"] = await database.count_user_items(actor_id, item_type="recipe")
|
||||
except Exception:
|
||||
stats["recipes"] = 0
|
||||
|
||||
@@ -51,11 +53,8 @@ async def get_user_stats(actor_id: str) -> dict:
|
||||
stats["storage"] = 0
|
||||
|
||||
try:
|
||||
effects_dir = Path(get_cache_manager().cache_dir) / "_effects"
|
||||
if effects_dir.exists():
|
||||
stats["effects"] = len([d for d in effects_dir.iterdir() if d.is_dir()])
|
||||
else:
|
||||
stats["effects"] = 0
|
||||
# Count user's effects from database (ownership-based)
|
||||
stats["effects"] = await database.count_user_items(actor_id, item_type="effect")
|
||||
except Exception:
|
||||
stats["effects"] = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user