search.py 1.13 KB
from typing import List, Any, Optional, Union

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session

from presupuestov1 import model, schema, constant, schemas, models, search


router = APIRouter(
    tags=['search']
)

###############################################################################
# GET
###############################################################################

@router.get('/search', response_model=schemas.project.Search)
def fetch_search(
    query: schema.SearchQueryParams = Depends(),
):
    if query.q is None or len(query.q.strip()) < 3:
        return {
            'facet_counts': [],
            'found': 0,
            'out_of': 0,
            'page': 0,
            'search_time_ms': 0,
            'hits': [],
        }

    try:
        return search.do_search(
            query.q, query.page, query.is_class, query.class_, query.order
        )
    except search.SearchUnavailable as exc:
        raise HTTPException(
            status_code=503,
            detail='Search temporarily unavailable',
            headers={'Retry-After': str(exc.retry_after)},
        ) from exc