dsantosmerino / registry_sample

Example application using the new Registry module in Elixir 1.4.0

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RegistrySample

Example application using the new Registry module in Elixir 1.4

See this blog post for more context.

The Basics

Clone the Repo

git clone git@github.com:amokan/registry_sample.git

Run the sample in IEX

cd registry_sample
iex -S mix

Scenario

From the blog post:

Imagine we have a scenario where we are selling widgets to customers. Our boss wants us to build a realtime UI that shows every account that has placed an order in the current day along with some basic info about each account. If an account doesn’t place another order within 24 hours, it should fall off the UI

RegistrySample.AccountDynamicSupervisor

The RegistrySample.AccountDynamicSupervisor is a :one_for_one dynamic supervisor that gives us a few helpful functions for creating new RegistrySample.Account processes and indicating which processes are already running.

Let's create an account process for account_id # 2 and account_id # 10.

iex> RegistrySample.AccountDynamicSupervisor.find_or_create_process(2)
{:ok, 2}

iex> RegistrySample.AccountDynamicSupervisor.find_or_create_process(10)
{:ok, 2}

iex> RegistrySample.AccountDynamicSupervisor.get_all_account_widgets_ordered
[%{account_id: 2, widgets_sold: 1}, %{account_id: 10, widgets_sold: 1}]

Now we can say that account_id # 10 ordered another widget, by just passing the account_id

iex> RegistrySample.Account.order_widget(10)
:ok

iex> RegistrySample.AccountDynamicSupervisor.get_all_account_widgets_ordered
[%{account_id: 2, widgets_sold: 1}, %{account_id: 10, widgets_sold: 2}]

About

Example application using the new Registry module in Elixir 1.4.0


Languages

Language:Elixir 100.0%