diff --git a/documentation/tutorials/get-started-with-double-entry.md b/documentation/tutorials/get-started-with-double-entry.md index 0e2eaf2..7e3d854 100644 --- a/documentation/tutorials/get-started-with-double-entry.md +++ b/documentation/tutorials/get-started-with-double-entry.md @@ -15,7 +15,7 @@ Ash Double Entry is implemented as a set of Ash resource extensions. You build t #### Example ```elixir -defmodule YourApp.Account do +defmodule YourApp.Leger.Account do use Ash.Resource, data_layer: AshPostgres.DataLayer, extensions: [AshDoubleEntry.Account] @@ -27,8 +27,8 @@ defmodule YourApp.Account do account do # configure the other resources it will interact with - transfer_resource YourApp.Transfer - balance_resource YourApp.Balance + transfer_resource YourApp.Ledger.Transfer + balance_resource YourApp.Ledger.Balance # accept custom attributes in the autogenerated `open` create action open_action_accept [:account_number] end @@ -78,8 +78,8 @@ defmodule YourApp.Transfer do transfer do # configure the other resources it will interact with - account_resource YourApp.Account - balance_resource YourApp.Balance + account_resource YourApp.Ledger.Account + balance_resource YourApp.Ledger.Balance end end ``` @@ -102,7 +102,7 @@ end #### Example ```elixir -defmodule YourApp.Balance do +defmodule YourApp.Ledger.Balance do use Ash.Resource, data_layer: AshPostgres.DataLayer, extensions: [AshDoubleEntry.Balance] @@ -114,8 +114,8 @@ defmodule YourApp.Balance do balance do # configure the other resources it will interact with - transfer_resource Transfer - account_resource Account + transfer_resource YourApp.Ledger.Transfer + account_resource YourApp.Ledger.Account end changes do @@ -162,40 +162,52 @@ defmodule YourApp.Ledger do use Ash.Api resources do - resource YourApp.Account - resource YourApp.Balance - resource YourApp.Transfer + resource YourApp.Ledger.Account + resource YourApp.Ledger.Balance + resource YourApp.Ledger.Transfer end end ``` +And add the API to your config + +`config :your_app, ash_apis: [..., YourApp.Ledger] + +### Generate Migrations + +`mix ash_postgres.generate_migrations --name add_double_entry_ledger` + +### Run them + +`mix ash_postgres.migrate` + ### Use them #### Create an account ```elixir -Account +YourApp.Ledger.Account |> Ash.Changeset.for_create(:open, %{identifier: "account_one", currency: "USD"}) -|> Api.create!() +|> YourApp.Ledger.create!() ``` #### Create transfers between accounts ```elixir -Transfer +YourApp.Ledger.Transfer |> Ash.Changeset.for_create(:transfer, %{ amount: Decimal.new(20), from_account_id: account_one.id, to_account_id: account_two.id }) -|> Api.create!() +|> YourApp.LedgerApi.create!() ``` #### Check an account's balance ```elixir -Account -|> Api.get!(account_id, load: :balance) +YourApp.Leger.Account +|> YourApp.Ledger.get!(account_id, load: :balance) |> Map.get(:balance) # => Decimal.new("20") ``` diff --git a/lib/account/transformers/add_structure.ex b/lib/account/transformers/add_structure.ex index f29fc45..673da9c 100644 --- a/lib/account/transformers/add_structure.ex +++ b/lib/account/transformers/add_structure.ex @@ -101,7 +101,7 @@ defmodule AshDoubleEntry.Account.Transformers.AddStructure do else Ash.Resource.Builder.add_action(dsl, :read, :_autogenerated_primary_read, primary?: true, - pagination: Ash.Resource.Builder.build_pagination(keyset?: true) + pagination: Ash.Resource.Builder.build_pagination(keyset?: true, required?: false) ) end end