Foo Developer created FINERACT-2864:
---------------------------------------

             Summary: Audit and maker-checker search templates return empty 
appUsers entries
                 Key: FINERACT-2864
                 URL: https://issues.apache.org/jira/browse/FINERACT-2864
             Project: Apache Fineract
          Issue Type: Bug
          Components: System
            Reporter: Foo Developer
            Assignee: Foo Developer


h3. Steps to reproduce

On a stock Fineract instance (any tenant with at least one application user), 
call the audit search template:

{code}GET /fineract-provider/api/v1/audits/searchtemplate
{code}

The maker-checker search template behaves the same way:

{code}GET /fineract-provider/api/v1/makercheckers/searchtemplate
{code}

h3. Expected

Each entry of {{appUsers}} carries the user's {{id}} and {{username}}, so a UI 
can fill the "User" / "Checker" dropdowns of the audit and checker inbox search 
screens:

{code:json}{
  "appUsers": [ { "id": 1, "username": "mifos" } ],
  "actionNames": [ ... ],
  "entityNames": [ ... ],
  "statuses": [ ... ]
}
{code}

h3. Actual

HTTP 200, but every {{appUsers}} entry is an empty object. No error is logged:

{code:json}{
  "appUsers": [ {}, {} ],
  ...
}
{code}

h3. Root cause

{{AuditsApiResource.retrieveAuditSearchTemplate()}} and 
{{MakercheckersApiResource.retrieveAuditSearchTemplate()}} return the 
{{AuditSearchData}} record directly, so Jersey writes it with the Jackson 
object mapper ({{JerseyJacksonObjectArgumentHandler}}) instead of the Gson 
based {{DefaultToApiJsonSerializer}} used by the other endpoints. Jackson only 
picks up properties that have a getter. {{AppUserData}} has plain {{private 
final}} fields and no getter for {{id}} or {{username}} (Gson reads fields 
directly, so no other endpoint needed one), which leaves nothing for Jackson to 
write for each user.

h3. Proposed fix

Add Lombok {{@Getter}} to {{AppUserData.id}} and {{AppUserData.username}}, the 
only two fields {{AppUserData.dropdown(id, username)}} fills for the search 
templates. A class-level {{@Getter}} is avoided on purpose, so the other fields 
(roles, staff, clients, password flags) are not exposed through this Jackson 
path. The Gson based endpoints that use {{AppUserData}} are unaffected.

h3. Test

A serialization test that writes an {{AuditSearchData}} with the Jersey 
{{objectMapper}} bean and asserts each {{appUsers}} entry contains exactly 
{{id}} and {{username}}. It fails on current {{develop}} (empty objects) and 
passes with the fix.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to