"""搜索路由""" from typing import Optional from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from sqlalchemy import or_ from database import get_db from models.user import User from models.post import Post from schemas.post import PostResponse, PostListResponse from routers.auth import get_current_user from routers.posts import _enrich_post router = APIRouter() @router.get("", response_model=PostListResponse) def search_posts( q: str = Query(..., min_length=1, description="搜索关键词"), category: Optional[str] = None, page: int = Query(1, ge=1), page_size: int = Query(20, ge=1, le=100), current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ): """全文搜索帖子""" query = db.query(Post).filter( or_(Post.is_public == True, Post.user_id == current_user.id), or_( Post.title.contains(q), Post.content.contains(q), Post.tags.contains(q), ), ) if category: query = query.filter(Post.category == category) total = query.count() posts = query.order_by(Post.created_at.desc()).offset((page - 1) * page_size).limit(page_size).all() return PostListResponse( items=[_enrich_post(p, db, current_user.id) for p in posts], total=total, page=page, page_size=page_size, )