Skip to content

openfoodfacts_proxy.routes.facets

[docs] module openfoodfacts_proxy.routes.facets

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from fastapi import APIRouter, Query, Request
from fastapi.responses import Response

from openfoodfacts_proxy.core.application_container import ApplicationContainer

router = APIRouter()


@router.get("/facets/{facet_name}", response_model=None)
async def get_facet_values(
    request: Request,
    facet_name: str,
    page: int = Query(1),
    page_size: int = Query(20),
    json: int | None = Query(None),
) -> Response:
    """Serve OFF facet value lists through the upstream proxy."""
    del page, page_size, json
    container = ApplicationContainer.from_app(request.app)
    return await container.facet_products_handler.handle_values(request, facet_name=facet_name)


@router.get("/facets/{facet_name}/{facet_value}", response_model=None)
async def get_facet_products(
    request: Request,
    facet_name: str,
    facet_value: str,
    page: int = Query(1),
    page_size: int = Query(25),
    fields: str | None = Query(None),
    sort_by: str | None = Query(None),
    json: int | None = Query(None),
) -> Response:
    """Serve supported OFF facet product lookups locally and proxy the rest."""
    del json
    container = ApplicationContainer.from_app(request.app)
    return await container.facet_products_handler.handle(
        request,
        facet_name=facet_name,
        facet_value=facet_value,
        page=page,
        page_size=page_size,
        fields=fields,
        sort_by=sort_by,
    )