2023-07-22 12:27:52 +12:00
|
|
|
defmodule AshDoubleEntry.Transfer.Transformers.AddStructure do
|
2023-09-27 02:46:07 +13:00
|
|
|
# Adds all the structure required for the resource. See the getting started guide for more.
|
|
|
|
@moduledoc false
|
2023-07-22 12:27:52 +12:00
|
|
|
use Spark.Dsl.Transformer
|
|
|
|
|
2023-08-06 16:27:33 +12:00
|
|
|
def before?(Ash.Resource.Transformers.CachePrimaryKey), do: true
|
2023-08-19 15:49:09 +12:00
|
|
|
def before?(Ash.Resource.Transformers.BelongsToSourceField), do: true
|
|
|
|
def before?(Ash.Resource.Transformers.BelongsToAttribute), do: true
|
2023-08-06 16:27:33 +12:00
|
|
|
def before?(_), do: false
|
|
|
|
|
2023-07-22 12:27:52 +12:00
|
|
|
def transform(dsl) do
|
|
|
|
dsl
|
2024-04-02 10:21:49 +13:00
|
|
|
|> Ash.Resource.Builder.add_new_attribute(:id, AshDoubleEntry.ULID,
|
2023-08-06 16:27:33 +12:00
|
|
|
primary_key?: true,
|
|
|
|
allow_nil?: false,
|
|
|
|
default: &AshDoubleEntry.ULID.generate/0,
|
|
|
|
generated?: false
|
|
|
|
)
|
2024-04-02 10:21:49 +13:00
|
|
|
|> Ash.Resource.Builder.add_new_attribute(:amount, AshMoney.Types.Money, allow_nil?: false)
|
|
|
|
|> Ash.Resource.Builder.add_new_attribute(:timestamp, :utc_datetime_usec,
|
2023-08-06 16:27:33 +12:00
|
|
|
allow_nil?: false,
|
|
|
|
default: &DateTime.utc_now/0
|
|
|
|
)
|
2024-04-02 10:21:49 +13:00
|
|
|
|> Ash.Resource.Builder.add_new_attribute(:inserted_at, :utc_datetime_usec,
|
2023-07-22 12:27:52 +12:00
|
|
|
allow_nil?: false,
|
2023-08-06 16:27:33 +12:00
|
|
|
default: &DateTime.utc_now/0
|
2023-07-22 12:27:52 +12:00
|
|
|
)
|
2024-04-02 10:21:49 +13:00
|
|
|
|> Ash.Resource.Builder.add_new_relationship(
|
2023-07-22 12:27:52 +12:00
|
|
|
:belongs_to,
|
2023-08-06 16:27:33 +12:00
|
|
|
:from_account,
|
|
|
|
AshDoubleEntry.Transfer.Info.transfer_account_resource!(dsl),
|
|
|
|
attribute_writable?: true
|
|
|
|
)
|
2024-04-02 10:21:49 +13:00
|
|
|
|> Ash.Resource.Builder.add_new_relationship(
|
2023-08-06 16:27:33 +12:00
|
|
|
:belongs_to,
|
|
|
|
:to_account,
|
|
|
|
AshDoubleEntry.Transfer.Info.transfer_account_resource!(dsl),
|
|
|
|
attribute_writable?: true
|
|
|
|
)
|
|
|
|
|> Ash.Resource.Builder.add_action(:create, :transfer,
|
2024-06-20 02:00:34 +12:00
|
|
|
accept:
|
|
|
|
[:amount, :timestamp, :from_account_id, :to_account_id] ++
|
|
|
|
AshDoubleEntry.Transfer.Info.transfer_create_accept!(dsl)
|
2023-08-06 16:27:33 +12:00
|
|
|
)
|
|
|
|
|> Ash.Resource.Builder.add_action(:read, :read_transfers,
|
|
|
|
pagination: Ash.Resource.Builder.build_pagination(keyset?: true)
|
2023-07-22 12:27:52 +12:00
|
|
|
)
|
2023-12-11 07:16:02 +13:00
|
|
|
|> Ash.Resource.Builder.add_change({AshDoubleEntry.Transfer.Changes.VerifyTransfer, []},
|
|
|
|
on: [:create, :update, :destroy]
|
|
|
|
)
|
2023-07-22 12:27:52 +12:00
|
|
|
end
|
|
|
|
end
|