Foo Developer created FINERACT-2702:
---------------------------------------
Summary: /v2/clients/search performs case-sensitive matching
instead of case-insensitive
Key: FINERACT-2702
URL: https://issues.apache.org/jira/browse/FINERACT-2702
Project: Apache Fineract
Issue Type: Bug
Components: Client
Reporter: Foo Developer
Assignee: Foo Developer
h3. Summary
The client search endpoint ({{{}GET /v2/clients/search{}}}) builds its query
predicates using case-sensitive {{LIKE}} comparisons, so a search term that
differs only in letter case from the stored value fails to match.
h3. Steps to Reproduce
# Create a client with, e.g., display name {{{}John Smith{}}}.
# Call {{{}GET /v2/clients/search?searchText=john{}}}.
# Observe that the client is not returned, even though {{john}} is a
case-insensitive substring of {{{}John Smith{}}}.
h3. Expected Behavior
Search should match regardless of case, consistent with how users typically
expect free-text search to behave (and consistent with account number, mobile
number, external ID, and identifier document key fields, which have the same
issue).
h3. Actual Behavior
Only exact-case substring matches are returned, since the predicates in
{{SearchingClientRepositoryImpl.searchByText}} compare the raw {{searchText}}
against {{{}accountNumber{}}}, {{{}displayName{}}}, {{{}externalId{}}},
{{{}mobileNo{}}}, and {{identifiers.documentKey}} without any case
normalization.
h3. Suggested Fix
Lower-case the search term and wrap each compared field with
{{CriteriaBuilder.lower(...)}} (or the {{LOWER()}} SQL function, for fields
whose JPA path type requires {{{}cb.function("LOWER", ...){}}}), so the
{{LIKE}} comparison is case-insensitive on both sides.
h3. Affected File
{{fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/search/SearchingClientRepositoryImpl.java}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)