"""Logika biznesowa — serce warstwy logicznej. Tu (a nie w prezentacji ani w bazie) żyją reguły: walidacja/normalizacja danych z formularza, tłumaczenie zapytania użytkownika na znormalizowane zapytanie do bazy, oraz opracowanie/wzbogacenie wyników w drodze w górę. To jest miejsce do rozbudowy o właściwą domenę (obliczenia, reguły, agregacje). """ from __future__ import annotations from app.clients.data_client import DataClient from app.models import QueryRequest, QueryResponse class QueryService: def __init__(self, data_client: DataClient | None = None) -> None: self.data = data_client or DataClient() def handle(self, req: QueryRequest) -> QueryResponse: # 1) normalizacja wejścia z formularza (reguła biznesowa) value = req.query.strip() key = req.field.strip().lower() # 2) zapytanie w dół do warstwy bazodanowej raw = self.data.search(key=key, value=value, exact=req.exact, limit=req.limit) # 3) opracowanie wyników w górę (tu można liczyć/wzbogacać/sortować) results = raw.get("rows", []) results = sorted(results, key=lambda r: str(r.get(key, ""))) return QueryResponse( status="ok", query=value, count=len(results), results=results, meta={ "field": key, "exact": req.exact, "data_cache": raw.get("cache"), "data_provider": raw.get("provider"), "data_elapsed_ms": raw.get("elapsed_ms"), }, )