from fastapi import APIRouter, Depends, Query from typing import List, Optional from datetime import datetime from ..auth import get_current_user from ..models import User, File, Folder from ..schemas import FileOut, FolderOut router = APIRouter( prefix="/search", tags=["search"], ) @router.get("/files", response_model=List[FileOut]) async def search_files( q: str = Query(..., min_length=1, description="Search query"), file_type: Optional[str] = Query( None, description="Filter by MIME type prefix (e.g., 'image', 'video')" ), min_size: Optional[int] = Query(None, description="Minimum file size in bytes"), max_size: Optional[int] = Query(None, description="Maximum file size in bytes"), date_from: Optional[datetime] = Query( None, description="Filter files created after this date" ), date_to: Optional[datetime] = Query( None, description="Filter files created before this date" ), current_user: User = Depends(get_current_user), ): query = File.filter(owner=current_user, is_deleted=False, name__icontains=q) if file_type: query = query.filter(mime_type__istartswith=file_type) if min_size is not None: query = query.filter(size__gte=min_size) if max_size is not None: query = query.filter(size__lte=max_size) if date_from: query = query.filter(created_at__gte=date_from) if date_to: query = query.filter(created_at__lte=date_to) files = await query.order_by("-created_at").limit(100) return [await FileOut.from_tortoise_orm(f) for f in files] @router.get("/folders", response_model=List[FolderOut]) async def search_folders( q: str = Query(..., min_length=1, description="Search query"), current_user: User = Depends(get_current_user), ): folders = ( await Folder.filter(owner=current_user, is_deleted=False, name__icontains=q) .order_by("-created_at") .limit(100) ) return [await FolderOut.from_tortoise_orm(folder) for folder in folders]