Packages

A handler for the Alice Slack bot. Suggest where to eat from self-curated lists of restaurants.

Current section

Files

Jump to
alice_eats lib alice eats group.ex
Raw

lib/alice/eats/group.ex

defmodule Alice.Eats.Group do
@enforce_keys [:name]
defstruct name: "", members: [], restaurants: []
alias Alice.Eats.Group
def join(%Group{members: members}=group, user_id) do
if user_id in members do
{:error, :already_member}
else
{:ok, %{group | members: [user_id | members]}}
end
end
def leave(%Group{members: members}=group, user_id) do
{:ok, %{group | members: List.delete(members, user_id)}}
end
def add_restaurant(%Group{restaurants: restaurants}=group, restaurant) do
if restaurant in restaurants do
{:error, :already_exists, restaurant, group.name}
else
{:ok, %{group | restaurants: [restaurant | restaurants]}}
end
end
def remove_restaurant(%Group{restaurants: restaurants}=group, restaurant) do
{:ok, %{group | restaurants: List.delete(restaurants, restaurant)}}
end
def get_restaurants(%Group{restaurants: []}), do: {:error, :no_restaurants}
def get_restaurants(%Group{restaurants: rants}), do: {:ok, rants}
end