Raathmd

Raathmd

I have an api to a logistics system where customers of the transport company can create a quote for delivery of goods.
I will develop a web app, where the quote will start as a quote request saved in a postgres database. A UI function will allow submitting this request to multiple logistics systems to compare pricing. When the customer wants to create a quote they will submit to create a quote, which will return a quote number from the api if successful.

The quote has a From and To delivery address and quote items showing the quantity, description and dimensions for multiple products.

My questions:

  1. Is it recommended to model quote items as a resource and embed as a resource attribute of the quote resource ?
  2. As for the form, how does ash support managing these items in the UI?
  3. To make this a multitenant application, how can the logistics tenants manage their system api and credentials and their own auth policy?

Showing Posts 1 to 2

zachdaniel

zachdaniel

Creator of Ash

You can write an update or a generic action that will communicate with an external API using essentially regular Elixir code. You can definitely model the quote items as an embedded resource to store the results of those calls in the attributes etc.

You can do something like:

update :get_quote do
  change fn changeset, _ -> 
    Ash.Changeset.before_transaction(changeset, fn changeset -> 
      # make an external call and save the results in the changeset here.
    end)
  end
end 

or you could use a generic action

# perhaps you return the quote number. You can return whatever type you want here.
action :get_quote, :struct do
  constraints instance_of: Quote
  argument :quote_request_id, :uuid

  run fn input, _context -> 
    # lookup the quote
    # make an external call
    # update the quote
    # return {:ok, quote}
  end
end
zachdaniel

zachdaniel

Creator of Ash

AshPhoenix.Form supports managing nested forms/related data, and you can lookup the credentials for the organization/tenant before making your request.

— All posts loaded —

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
psy-q
I’m trying to set up Emacs with elixir-ls via lsp-mode and credo via Flycheck. This should mostly be preconfigured as Flycheck picks up c...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews