You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@fineract.apache.org by "Foo Developer (Jira)" <ji...@apache.org> on 2026/09/28 17:53:00 UTC

[jira] [Created] (FINERACT-2864) Audit and maker-checker search templates return empty appUsers entries

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)