diff --git a/lib/chess/store/user.ex b/lib/chess/store/user.ex index bb247d0..4b51856 100644 --- a/lib/chess/store/user.ex +++ b/lib/chess/store/user.ex @@ -2,7 +2,10 @@ defmodule Chess.Store.User do @moduledoc false use Ecto.Schema + import Ecto.Changeset + import Ecto.Query + alias Comeonin.Argon2 schema "users" do @@ -26,6 +29,12 @@ defmodule Chess.Store.User do |> hash_password() end + def opponents(user) do + from user in "users", + where: user.id != ^user.id, + select: {user.name, user.id} + end + defp hash_password(changeset) do password = get_change(changeset, :password) if password do diff --git a/lib/chess_web/controllers/game_controller.ex b/lib/chess_web/controllers/game_controller.ex index 549b10e..91c76c2 100644 --- a/lib/chess_web/controllers/game_controller.ex +++ b/lib/chess_web/controllers/game_controller.ex @@ -2,11 +2,13 @@ defmodule ChessWeb.GameController do use ChessWeb, :controller alias Chess.Store.Game + alias Chess.Store.User import Chess.Auth, only: [current_user: 1] def index(conn, _params) do changeset = Game.changeset(%Game{}) + games = conn |> current_user() @@ -21,23 +23,22 @@ defmodule ChessWeb.GameController do def new(conn, _params) do changeset = Game.changeset(%Game{}) + opponents = conn |> current_user() - |> get_opponents() + |> User.opponents() + |> Repo.all conn |> render("new.html", changeset: changeset, opponents: opponents) end def create(conn, %{"game" => %{"opponent_id" => opponent_id}}) do - changeset = Game.changeset( - %Game{}, - %{ - user_id: current_user(conn).id, - opponent_id: opponent_id - } - ) + changeset = Game.changeset(%Game{}, %{ + user_id: current_user(conn).id, + opponent_id: opponent_id + }) case Repo.insert(changeset) do {:ok, game} -> @@ -46,7 +47,12 @@ defmodule ChessWeb.GameController do |> redirect(to: game_path(conn, :show, game)) {:error, changeset} -> - opponents = get_opponents(current_user(conn)) + opponents = + conn + |> current_user() + |> User.opponents() + |> Repo.all + conn |> render("new.html", changeset: changeset, opponents: opponents) end @@ -58,6 +64,7 @@ defmodule ChessWeb.GameController do |> current_user() |> Game.for_user() |> preload([:user, :opponent]) + game = query |> Repo.get!(id) @@ -77,13 +84,4 @@ defmodule ChessWeb.GameController do |> put_flash(:info, "Game deleted successfully.") |> redirect(to: game_path(conn, :index)) end - - defp get_opponents(user) do - query = from user in "users", - where: user.id != ^user.id, - select: {user.name, user.id} - - query - |> Repo.all - end end