From dddebf06adfe96604a0379ee7cd574f2f9752f63 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Sun, 13 May 2018 19:32:05 -0400 Subject: [PATCH] Some refactoring --- lib/chess/move_list.ex | 2 +- lib/chess/moves.ex | 14 +++++++++++++- lib/chess/store/move.ex | 1 - lib/chess_web/channels/game_channel.ex | 23 +++++++---------------- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/chess/move_list.ex b/lib/chess/move_list.ex index aa69fad..94bc266 100644 --- a/lib/chess/move_list.ex +++ b/lib/chess/move_list.ex @@ -5,7 +5,7 @@ defmodule Chess.MoveList do def transform(moves) do moves - |> Enum.map(fn(move) -> Move.transform(move) end) + |> Enum.map(&(Move.transform(&1))) |> Enum.chunk_every(2) end end diff --git a/lib/chess/moves.ex b/lib/chess/moves.ex index 3eda859..2e5a573 100644 --- a/lib/chess/moves.ex +++ b/lib/chess/moves.ex @@ -1,8 +1,11 @@ defmodule Chess.Moves do @moduledoc false + alias Ecto.Multi + + alias Chess.Repo alias Chess.Board - alias Chess.Store.Move + alias Chess.Store.Game alias Chess.Moves.Pieces.Pawn alias Chess.Moves.Pieces.Bishop @@ -11,6 +14,15 @@ defmodule Chess.Moves do alias Chess.Moves.Pieces.Queen alias Chess.Moves.Pieces.King + def make_move(game, move_params) do + params = Board.move_piece(game.board, move_params) + + Multi.new + |> Multi.update(:game, Game.move_changeset(game, params)) + |> Multi.insert(:move, Ecto.build_assoc(game, :moves, params)) + |> Repo.transaction + end + def available(board, {file, rank}) do piece = board diff --git a/lib/chess/store/move.ex b/lib/chess/store/move.ex index d6069d3..9c560b6 100644 --- a/lib/chess/store/move.ex +++ b/lib/chess/store/move.ex @@ -5,7 +5,6 @@ defmodule Chess.Store.Move do use Timex.Ecto.Timestamps import Ecto.Changeset - # import Ecto.Query alias Chess.Store.Game diff --git a/lib/chess_web/channels/game_channel.ex b/lib/chess_web/channels/game_channel.ex index 39763f5..a69a56d 100644 --- a/lib/chess_web/channels/game_channel.ex +++ b/lib/chess_web/channels/game_channel.ex @@ -3,8 +3,6 @@ defmodule ChessWeb.GameChannel do use ChessWeb, :channel - alias Ecto.Multi - alias Chess.Store.Game alias Chess.Board alias Chess.Moves @@ -43,18 +41,11 @@ defmodule ChessWeb.GameChannel do def handle_in("game:move", params, socket) do move_params = convert_params(params) - game = - socket.assigns.current_user_id - |> Game.for_user_id() - |> preload(:moves) - |> Repo.get!(socket.assigns.game_id) - - params = Board.move_piece(game.board, move_params) - - Multi.new - |> Multi.update(:game, Game.move_changeset(game, params)) - |> Multi.insert(:move, Ecto.build_assoc(game, :moves, params)) - |> Repo.transaction + socket.assigns.current_user_id + |> Game.for_user_id() + |> preload(:moves) + |> Repo.get!(socket.assigns.game_id) + |> Moves.make_move(move_params) |> case do {:ok, _} -> send_update(socket) @@ -91,8 +82,8 @@ defmodule ChessWeb.GameChannel do def convert_params(%{"from" => from, "to" => to}) do %{ - "from" => Enum.map(from, fn(s) -> String.to_integer(s) end), - "to" => Enum.map(to, fn(s) -> String.to_integer(s) end), + "from" => Enum.map(from, &(String.to_integer(&1))), + "to" => Enum.map(to, &(String.to_integer(&1))), } end