Skip to content
This repository has been archived by the owner on Jun 30, 2021. It is now read-only.

Commit

Permalink
Add filtering to transaction controller
Browse files Browse the repository at this point in the history
  • Loading branch information
Unnawut committed Aug 31, 2018
1 parent 8b22ce2 commit aad92e6
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defmodule AdminAPI.V1.TransactionController do
use AdminAPI, :controller
import AdminAPI.V1.ErrorHandler
alias EWallet.TransactionGate
alias EWallet.Web.{SearchParser, SortParser, Paginator, Preloader}
alias EWallet.Web.{FilterParser, SearchParser, SortParser, Paginator, Preloader}
alias EWallet.TransactionPolicy
alias EWalletDB.{Repo, Transaction, User, Account}
alias Ecto.Changeset
Expand All @@ -22,6 +22,30 @@ defmodule AdminAPI.V1.TransactionController do
# Note that these values *must be in the schema associations*.
@preload_fields [:from_token, :to_token]

# The fields that are allowed to be filtered.
@filter_fields [
# From
from_amount: nil,
from_token: [:id, :name, :symbol, :inserted_at, :created_at],
from_wallet: [:address, :name, :identifier, :inserted_at, :created_at],
from_account: [:id, :name, :inserted_at, :created_at],
from_user: [:id, :username, :email, :provider_user_id, :inserted_at, :created_at],
# To
to_amount: nil,
to_token: [:id, :name, :symbol],
to_wallet: [:address, :name, :identifier],
to_account: [:id, :name, :inserted_at, :created_at],
to_user: [:id, :username, :email, :provider_user_id, :inserted_at, :created_at],
# Exchange
exchange_account: [:id, :name, :inserted_at, :created_at],
exchange_wallet: [:address, :name, :identifier, :inserted_at, :created_at],
# Other data
status: nil,
type: nil,
inserted_at: nil,
updated_at: nil
]

# The fields that are allowed to be searched.
# Note that these values here *must be the DB column names*
# Because requests cannot customize which fields to search (yet!),
Expand Down Expand Up @@ -149,6 +173,7 @@ defmodule AdminAPI.V1.TransactionController do
defp query_records_and_respond(query, attrs, conn) do
query
|> Preloader.to_query(@preload_fields)
|> FilterParser.to_query(attrs, @filter_fields)
|> SearchParser.to_query(attrs, @search_fields)
|> SortParser.to_query(attrs, @sort_fields, @mapped_fields)
|> Paginator.paginate_attrs(attrs)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,30 @@ defmodule AdminAPI.V1.AdminAuth.TransactionControllerTest do
assert transaction_1["id"] == meta.mint.transaction.id
assert transaction_2["id"] == meta.init_transaction_1.id
end

test "returns filtered transactions", meta do
response =
admin_user_request("/transaction.all", %{
"filters" => [
%{
"field" => "from_wallet.address",
"comparator" => "eq",
"value" => meta.wallet_4.address
}
]
})

transactions = response["data"]["data"]

refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_1.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_2.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_3.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_4.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_5.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_6.id end)
assert Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_7.id end)
assert Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_8.id end)
end
end

describe "/account.get_transactions" do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,30 @@ defmodule AdminAPI.V1.ProviderAuth.TransactionControllerTest do
assert transaction_1["id"] == meta.mint.transaction.id
assert transaction_2["id"] == meta.init_transaction_1.id
end

test "returns filtered transactions", meta do
response =
provider_request("/transaction.all", %{
"filters" => [
%{
"field" => "from_wallet.address",
"comparator" => "eq",
"value" => meta.wallet_4.address
}
]
})

transactions = response["data"]["data"]

refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_1.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_2.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_3.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_4.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_5.id end)
refute Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_6.id end)
assert Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_7.id end)
assert Enum.any?(transactions, fn txn -> txn["id"] == meta.transaction_8.id end)
end
end

describe "/account.get_transactions" do
Expand Down

0 comments on commit aad92e6

Please sign in to comment.