Skip to content

feat(client): fetch several records by their codes in one request - #55

Merged
pekral merged 2 commits into
masterfrom
feat/find-by-codes
Nov 12, 2026
Merged

pekral merged 2 commits into
masterfrom
feat/find-by-codes

Conversation

@pekral

@pekral pekral commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator

Closes #43

TL;DR

Nová metoda Client::findByCodes(array $codes, array $uriParameters = []) načte více záznamů evidence podle seznamu kódů jedním requestem. Navíc oprava bezpečnostní chyby: kód s apostrofem mohl změnit filtr.

Změny

  • Client::findByCodes() pošle jeden GET s filtrem (kod in ('A','B')) a vrátí pole EvidenceResult jen pro nalezené záznamy. Pro prázdný seznam kódů request neposílá a vrátí [].
  • UrlBuilder::createUriByCodes() validuje každý kód stejně jako getByCode().
  • Pre-existing oprava: ParameterValidator dosud kontroloval jen délku a velká písmena. Kód A') OR (1=1 prošel a změnil význam filtru (kod eq '…') v getByCode()/findByCode(). Kód s apostrofem je teď odmítnut. Chyba existovala už ve verzi 1.4, je zapsaná v CHANGELOG.md.
  • README a CHANGELOG doplněny.

Zdroje

Merge danger

  • Dveře: two-way.
  • Nová metoda nemění existující API. Odmítnutí apostrofu je změna chování, ale kód s apostrofem do filtru FlexiBee stejně nepatří.
  • Neověřeno živě: demo server FlexiBee při ověřování vracel 429 Too Many Requests pro všechny dotazy s filtrem, i pro dříve funkční kod eq. Kombinace in s textovými hodnotami vychází ze zdokumentované syntaxe (operátor in + řetězce v apostrofech), přímý příklad pro řetězce dokumentace neuvádí.

Testování

  • Unit testy: URL s filtrem kod in, validace každého kódu, prázdný seznam bez requestu, vrácení výsledků z klienta, odmítnutí apostrofu.
  • composer check prochází, pokrytí změněných řádků 20/20.
  • Ručně proti FlexiBee: $client->findByCodes(['KOD1', 'KOD2']) musí vrátit oba záznamy, neexistující kód se ve výsledku neobjeví.

A code is interpolated into a FlexiBee filter as (kod eq '<code>'). The
validator only checked length and upper case, so a code such as
"A') OR (1=1" passed and changed the meaning of the filter. Codes with
an apostrophe are now rejected.
Client::findByCodes() loads the records of the configured evidence whose
codes are in the given list through a single (kod in ('A','B')) filter.
Every code is validated like in getByCode(); an empty list returns no
results without a request.

Closes #43
@pekral pekral added this to the 2.0.0 milestone Nov 12, 2026
@pekral
pekral marked this pull request as ready for review November 12, 2026 15:03
@pekral

pekral commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator Author

Code Review

Status: clean
Counts: Critical 0 · Moderate 0 · Minor 0 · Refactoring 0
Last updated: 2026-11-12T15:03:28Z (head 667d716)
Issue tracker summary: no linked issue summary posted — #43 is the source issue (empty description)


Summary: 0 Critical · 0 Moderate · 0 Minor · 0 Refactoring · assignment conformance: conformant (#43: batch fetch by codes from evidence in one request) · reviewer comments: none

@pekral
pekral merged commit 5e947bb into master Nov 12, 2026
4 checks passed
@pekral
pekral deleted the feat/find-by-codes branch November 12, 2026 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Batch fetch by codes from evidence

1 participant