"""Image search and filtering functionality.""" from sqlalchemy import or_ from sqlalchemy.orm import Session from app.database.models.image import Image def search_images( user_id: str, db: Session, query: str | None = None, limit: int = 50, offset: int = 0, ) -> list[Image]: """ Search user's image library with optional filters. Args: user_id: User UUID db: Database session query: Search query (searches filename) limit: Maximum results (default 50) offset: Pagination offset (default 0) Returns: List of matching images """ # Base query - get user's images stmt = db.query(Image).filter(Image.user_id == user_id) # Add search filter if query provided if query: search_term = f"%{query}%" stmt = stmt.filter( or_( Image.filename.ilike(search_term), Image.image_metadata["format"].astext.ilike(search_term), ) ) # Order by most recently uploaded stmt = stmt.order_by(Image.created_at.desc()) # Apply pagination stmt = stmt.limit(limit).offset(offset) return stmt.all() def count_images(user_id: str, db: Session, query: str | None = None) -> int: """ Count images matching search criteria. Args: user_id: User UUID db: Database session query: Search query (optional) Returns: Count of matching images """ stmt = db.query(Image).filter(Image.user_id == user_id) if query: search_term = f"%{query}%" stmt = stmt.filter( or_( Image.filename.ilike(search_term), Image.image_metadata["format"].astext.ilike(search_term), ) ) return stmt.count()