66 lines
1.8 KiB
Elixir
66 lines
1.8 KiB
Elixir
defmodule Bwc do
|
|
@moduledoc """
|
|
The core module for the Blank White Cards game.
|
|
"""
|
|
|
|
alias Bwc.{Repo, Card, Player}
|
|
|
|
@repo Repo
|
|
|
|
def new_player, do: Player.changeset(%Player{})
|
|
|
|
def create_player(attrs), do: Player.changeset(%Player{}, attrs) |> @repo.insert()
|
|
|
|
def delete_player(nil), do: {:error, "Player does not exist"}
|
|
def delete_player(%Player{} = player), do: player |> @repo.delete
|
|
|
|
|
|
def reset, do: Bwc.list_players |> Enum.each(fn(p) -> Bwc.delete_player(p) end)
|
|
|
|
def change_name({old_username, new_username}) do
|
|
{:ok, old_player} = old_username |> Bwc.get_or_create_player
|
|
old_player |> Player.changeset(%{username: new_username}) |> @repo.update()
|
|
end
|
|
|
|
def list_players, do: @repo.all(Player) |> Enum.filter(fn(p) -> p.username != "Nobody" end)
|
|
|
|
def get_player(id), do: @repo.get!(Player, id)
|
|
|
|
def get_player_by_username(username), do: get_player_by(%{username: username})
|
|
|
|
def get_player_by(params), do: @repo.get_by(Player, params)
|
|
|
|
def get_or_create_player(username) do
|
|
case get_player_by(%{username: username}) do
|
|
%Player{} = player ->
|
|
{:ok, player}
|
|
_ ->
|
|
create_player(%{username: username})
|
|
end
|
|
end
|
|
|
|
def list_cards, do: @repo.all(Card)
|
|
|
|
def get_card(id), do: @repo.get!(Card, id)
|
|
|
|
def get_card_by(attrs), do: @repo.get_by(Card, attrs)
|
|
|
|
def create_card(attrs), do: Card.changeset(%Card{}, attrs) |> @repo.insert()
|
|
|
|
def new_card, do: Card.changeset(%Card{})
|
|
|
|
def size, do: Bwc.list_cards() |> length
|
|
|
|
def draw_card, do: Bwc.list_cards() |> Enum.random()
|
|
def draw, do: draw_card()
|
|
|
|
def delete_card(%Bwc.Card{} = card), do: @repo.delete(card)
|
|
def delete_card!(%Bwc.Card{} = card), do: @repo.delete!(card)
|
|
|
|
def update_card(%Bwc.Card{} = card, updates) do
|
|
card
|
|
|> Card.changeset(updates)
|
|
|> @repo.update
|
|
end
|
|
end
|