viniciuslm

viniciuslm

How use filter with ash.calculation?

defmodule Project.Calculations.ActiveCustomer do
  use Ash.Calculation

  alias Project.Customer
  
  @impl true
  def calculate(records, _opts, %{}) do
    Enum.map(records, fn record ->
      active_customer?(record)
    end)
  end

  defp active_customer?(%Client{amount: amount, status: status})
       when amount > 0 and status == :active,
       do: true

  defp active_customer?(_), do: false
end
efmodule Project.Customer do
  use Ash.Resource, data_layer: AshPostgres.DataLayer

  alias Project.Calculations.ActiveCustomer

  postgres do
    table("customer")

    repo(Project.Repo)
  end

  attributes do
    uuid_primary_key :id
    create_timestamp :inserted_at
    update_timestamp :updated_at
    attribute :name, :string, do: allow_nil? false
    attribute :identificacao_cliente, :string, do: allow_nil? false 
    attribute :status, :boolean, do: allow_nil? false

    attribute :amount, :integer do
      allow_nil? false
      default 0
    end
  end


  code_interface do
    define_for(Project.Operaction)
    define :by_id_and_active_customer, args: [:id], action: :by_id_and_active_customer
  end

  actions do
    defaults([:read])

    read :by_id_and_active_customer do
      prepare(build(load: :active_customer?))
      argument(:id, :uuid, allow_nil?: false)
      get?(true)
      filter(expr(id == ^arg(:id) and active_customer? == true))
    end
  end

  calculations do
    calculate :active_customer?, :boolean, ActiveCustomer
  end
end

when execute Project.Customer.by_id_and_active_customer “48804d19-4747-45ae-96c3-9738cf724f4d”, than show an error:

(exit) an exception was raised:
    ** (UndefinedFunctionError) function Project.Calculations.ActiveCustomer.expression/2 is undefined or private

I readed the manual, but it haven’t example for use with expression.

https://hexdocs.pm/ash/Ash.Calculation.html

I need to use calculation, because, i have more code. I simplified the code.

Can someone help me?

Most Liked

zachdaniel

zachdaniel

Creator of Ash

Correct, you cannot use that in a filter. You can do a lot using expressions, so consider if that is possible. Keep in mind that you can use fragment to embed raw sql into an expression, i.e expr(fragment("SOME ? SQL ? WITH ? SAFE ? INTERPOLATION", field1, field2))

Where Next?

Popular in Questions Top

greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New

Other popular topics Top

WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36432 110
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 54250 245
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement