[ 
https://issues.apache.org/jira/browse/FINERACT-1915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17750237#comment-17750237
 ] 

Peter Santa commented on FINERACT-1915:
---------------------------------------

Márta Jankovics 
yesterday
 
 
*POST savingsaccounts/<savings id>/transactions/query*

Example uri:

{\{url}}/savingsaccounts/1/transactions/query

Request body: PagedRequest<{{{}AdvancedQueryRequest{}}}>

dateFormat, locale are not supported, but tenant locale and ISO patterns 
{{{}yyyy-MM-dd{}}}, {{yyyy-MM-dd HH:mm:ss}} are used

Camel case is supported for column names. 
{{{}baseQuery{}}}, {{{}datatableQueries{}}}, {{columnFilters}} are optional, 
but {{column}} is mandatory for a filter, {{values}} can be null depending on 
the operator ({_}NULL{_}, _NNULL_ do not accept values, {_}BTW{_}, _NBTW_ 
require two parameters, IN, _NIN_ accepts minimum 1 parameter(s), other 
operators require 1 parameter)

{{{}resultColumns{}}}, {{{}page{}}}, {{{}size{}}}, {{sorts}} are optional but 
sort {{property}} is mandatory

Result columns can be added from the base table and from each datatable. In the 
response, these will be listed without indicating which table the columns 
belong. 
NOTE: do not add column to the data tables with the same name.

operators:

{_}EQ{_}("="),
{_}NEQ{_}("<>"),
{_}GTE{_}(">="),
{_}LTE{_}("<="),
{_}GT{_}(">"),
{_}LT{_}("<"),
{_}LIKE{_}("LIKE")
{_}NLIKE{_}("NOT LIKE")
{_}BTW{_}("BETWEEN")
{_}NBTW{_}("NOT BETWEEN")
{_}IN{_}("IN")
{_}NIN{_}("NOT IN")
{_}NULL{_}("IS NULL")
{_}NNULL{_}("IS NOT NULL")

Example request:
{code:json}
{
    "request" : 
    {
        "baseQuery": {
           "columnFilters": [
            {
                "column": "transactionTypeEnum",
                "filters": [
                    {
                        "operator": "IN",
                        "values": [1,2,3,4]
                    }
                ]
            },
            {
                "column": "amount",
                "filters": [
                    {
                        "operator": "BTW",
                        "values": ["1000", "3000"]
                    }
                ]
            },
            {
                "column": "isReversed",
                "filters": [
                    {
                        "operator": "EQ",
                        "values": ["false"]
                    }
                ]
            },
            {
                "column": "submittedOnDate",
                "filters": [
                    {
                        "operator": "GT",
                        "values": ["2023-07-25"]
                    }
                ]
            }
            ],
            "resultColumns": ["id", "transactionTypeEnum", "submittedOnDate"]
        },
        "datatableQueries": [
        {
            "table": "dt_savings_transaction_1",
            "query": {
                "columnFilters": [
                    {
                        "column": "partnerName",
                        "filters": [
                            {
                                "operator": "LIKE",
                                "values": ["art"]
                            }
                        ]
                    },
                    {
                        "column": "bankTransactionCode",
                        "filters": [
                            {
                                "operator": "LIKE",
                                "values": ["123"]
                            }
                        ]
                    },
                    {
                        "column": "savingsTransactionId",
                        "filters": [
                            {
                                "operator": "GTE",
                                "values": ["1"]
                            }
                        ]
                    },
                    {
                        "column": "createdAt",
                        "filters": [
                            {
                                "operator": "BTW",
                                "values": ["2023-07-26 00:00:00", "2023-07-27 
00:00:00"]
                            },
                            {
                                "operator": "LT",
                                "values": ["2023-07-27 00:00:00"]
                            }
                        ]
                    }
                ],
                "resultColumns": ["partnerAccountId", "createdAt"]
            }
        }]
    },
    "dateFormat": "yyyy-MM-dd",
    "locale": "en",
    "page": 0,
    "size": 100,
    "sorts": [
        {
            "property": "id",
            "direction": "ASC"
        },
        {
            "property": "submittedOnDate",
            "direction": "ASC"
        },
        {
            "property": "transactionDate",
            "direction": "ASC"
        }
    ]
}
{code}

Response: 

Pageable list of requested result columns, defaults to the primary key column.
The result is sorted by the sorts columns, defaults to the primary key column.

Example response:

{code:json}
{
    "total": 2,
    "content": [
        {
            "id": 1,
            "transactionTypeEnum": 1,
            "submittedOnDate": "2023-07-26",
            "partnerAccountId": 1234,
            "createdAt": "2023-07-26 23:14:12"
        },
        {
            "id": 2,
            "transactionTypeEnum": 2,
            "submittedOnDate": "2023-07-26",
            "partnerAccountId": 12345,
            "createdAt": "2023-07-26 23:14:16"
        }
    ],
    "pageable": {
        "sort": {
            "orders": [
                {
                    "direction": "ASC",
                    "property": "id",
                    "ignoreCase": false,
                    "nullHandling": "NATIVE"
                },
                {
                    "direction": "ASC",
                    "property": "submittedOnDate",
                    "ignoreCase": false,
                    "nullHandling": "NATIVE"
                },
                {
                    "direction": "ASC",
                    "property": "transactionDate",
                    "ignoreCase": false,
                    "nullHandling": "NATIVE"
                }
            ]
        },
        "page": 0,
        "size": 100
    }
}
{code}

> Transaction query - considering assigned data table
> ---------------------------------------------------
>
>                 Key: FINERACT-1915
>                 URL: https://issues.apache.org/jira/browse/FINERACT-1915
>             Project: Apache Fineract
>          Issue Type: New Feature
>          Components: Savings
>            Reporter: Peter Santa
>            Priority: Major
>              Labels: BeanSalad
>
> h1. Prerequisites
> FINERACT-1911
> FINERACT-1910
> h1. Goal
> Make it possible to filter *Transactions* of Savings account with one 
> request, that includes conditions for
>  * attributes of the Transaction itself,
>  * attributes of the related data tables
> The filtering parameters should be applied with "AND" relation.
> The *result set should contain* data from the *assigned data table* besides 
> the Transaction attributes, considering the requested attributes.
> h1. Solution Concept
> Have the solution concept aligned between
>  * FINERACT-1910
>  * FINERACT-1912
>  * FINERACT-1915
> For providing the query parameters, have a similar solution to FIENRACT-1910 
> , but let the caller specify sections in the body for each related data 
> table, specifying the identifier of the related data table.
> Include the requested attributes in the response from the associated data 
> table.
> <Solution Concept to be extended by developers>
> h1. Notes
> Requirements for enhanced result set is included in FINERACT-1916, it might 
> worth to consider.
> h1. Acceptance Criteria
>  * It is supported to query for {*}transactions{*}, that meets the defined 
> conditions, and the assigned data table records meets the defined conditions.
>  * The conditions in the request are defined on a way as the prerequisite 
> FINERACT-1910 does, and additionally to that it lets the caller specify 
> sections in the body for each related data table, specifying its name.
>  * The result set contains the requested *attributes from the assigned data 
> tables* also.



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

Reply via email to