Skip to content

Instantly share code, notes, and snippets.

@shankardevy

shankardevy/bot_channel.ex Secret

Last active Aug 19, 2017
Embed
What would you like to do?
defmodule MangoWeb.BotChannel do
use MangoWeb, :channel
alias Mango.Sales
def join("pos", payload, socket) do
welcome_text = "Hello! Welcome to Mango Point of Sale"
{:ok, %{message: welcome_text}, socket}
end
def handle_in("status", payload, socket) do
reply = case Sales.get_order(payload["message"]) do
nil -> %{ message: "Order not found." }
order -> %{ message: "Status: #{order.status}"}
end
{:reply, {:ok, reply}, socket}
end
def handle_in("new", _, socket) do
order = Sales.create_cart()
new_socket = socket |> assign(:order, order)
reply = %{ message: "New Order in Progress: ##{order.id}" }
{:reply, {:ok, reply}, new_socket}
end
def handle_in("add", payload, socket) do
item = String.split(payload["message"], " ")
reply = case [socket.assigns[:order], item] do
[nil, _] ->
%{ message: "Please create a new order before proceeding." }
[order, [product_id, quantity]] ->
{:ok, order} = Sales.add_to_cart(order, %{"product_id" => product_id, "quantity" => quantity})
socket = socket |> assign(:order, order)
%{ message: "Product added to order." }
_ ->
%{ message: "Error" }
end
{:reply, {:ok, reply}, socket}
end
def handle_in("complete", _, socket) do
reply = case socket.assigns[:order] do
nil ->
%{ message: "Please create a new order before proceeding." }
order ->
Sales.pos_sale_complete(order)
socket = socket |> assign(:order, nil)
%{ message: "Sale complete. Order total is INR #{order.total}" }
end
{:reply, {:ok, reply}, socket}
end
def handle_in(_, payload, socket) do
reply = %{ message: "I don't understand your question." }
{:reply, {:error, reply}, socket}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment