Hello! I am really really new to Elixir, getting hands dirty with existing code base.
I do have a transactions
object - a list of maps that is returned by an API call. Now, let’s assume this object is done this way:
[{"id":"xyz", "amount": 45.00, "description":"Una mattina mi son svegliato", "dateTime":"2022-10-06T00:00:00.000"},
{"id":"abc", "amount": 74.00, "description":"Vacationes En Chile", "dateTime":"2022-10-05T15:30:00.000"},
{"id":"xyz", "amount": 2.00, "description":"oh bella ciao", "dateTime":"2022-10-06T00:00:00.000"}
]
Currently, the array is streamed with stuff being done in .filter
and .map
method, something like this:
defp fetch_account_transactions(consent, token, account, start_from) do
with {:ok, transactions} <-
do_fetch_account_transactions(consent, token, account, []) do
{
:ok,
transactions
|> Stream.filter(fn data ->
data["status"] == "BOOKED" && data["transactionMutability"] != "Mutable"
end)
|> Stream.map(&data_to_transaction(account, consent, &1))
}
end
end
What I’d like to do is applying a transformation to transactions
before it’s being streamed, such that, if something is true, I group maps in that list such that the final transactions object that gets filtered and mapped is the following:
[{"id":"xyz", "amount": 47.00, "description":"Una mattina mi son svegliato oh bella ciao", "dateTime":"2022-10-06T00:00:00.000"},
{"id":"abc", "amount": 74.00, "description":"Vacationes En Chile", "dateTime":"2022-10-05T15:30:00.000"}
]
that is - grouping by “id” field in maps and applying transformations such as sum(amount), min(dateTime) and concat(descriptions).
So grateful in advance for your support!