1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00

Better way of setting defaults

This commit is contained in:
Daniel Barber 2018-03-01 08:46:53 -05:00
parent d982d19713
commit a8bb242385
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
4 changed files with 5 additions and 19 deletions

View File

@ -11,8 +11,8 @@ defmodule Chess.Store.Game do
alias Chess.Store.Game alias Chess.Store.Game
schema "games" do schema "games" do
field :board, :map field :board, :map, default: Board.default()
field :turn, :string field :turn, :string, default: "white"
belongs_to :user, Chess.Auth.User belongs_to :user, Chess.Auth.User
belongs_to :opponent, Chess.Auth.User, references: :id belongs_to :opponent, Chess.Auth.User, references: :id
@ -20,16 +20,6 @@ defmodule Chess.Store.Game do
timestamps() timestamps()
end end
def create_changeset(struct, params \\ %{}) do
struct
|> cast(params, required_attrs())
|> foreign_key_constraint(:user_id)
|> foreign_key_constraint(:opponent_id)
|> put_change(:board, Board.default())
|> put_change(:turn, default_turn())
|> validate_required(required_attrs())
end
def changeset(struct, params \\ %{}) do def changeset(struct, params \\ %{}) do
struct struct
|> cast(params, required_attrs()) |> cast(params, required_attrs())
@ -53,8 +43,4 @@ defmodule Chess.Store.Game do
end end
defp required_attrs, do: ~w[board turn user_id opponent_id]a defp required_attrs, do: ~w[board turn user_id opponent_id]a
defp default_turn do
"white"
end
end end

View File

@ -31,7 +31,7 @@ defmodule ChessWeb.GameController do
end end
def create(conn, %{"game" => %{"opponent_id" => opponent_id}}) do def create(conn, %{"game" => %{"opponent_id" => opponent_id}}) do
changeset = Game.create_changeset( changeset = Game.changeset(
%Game{}, %Game{},
%{ %{
user_id: current_user(conn).id, user_id: current_user(conn).id,

View File

@ -40,7 +40,7 @@ defmodule Chess.GameTest do
user = create_user("link", "ilovezelda") user = create_user("link", "ilovezelda")
opponent = create_user("zelda", "ganonsucks") opponent = create_user("zelda", "ganonsucks")
attrs = %{user_id: user.id, opponent_id: opponent.id} attrs = %{board: nil, user_id: user.id, opponent_id: opponent.id}
changeset = Game.changeset(%Game{}, attrs) changeset = Game.changeset(%Game{}, attrs)
refute changeset.valid? refute changeset.valid?

View File

@ -12,7 +12,7 @@ defmodule Chess.Factory do
end end
def create_game_for(user, opponent) do def create_game_for(user, opponent) do
Game.create_changeset( Game.changeset(
%Game{}, %Game{},
%{user_id: user.id, opponent_id: opponent.id} %{user_id: user.id, opponent_id: opponent.id}
) )