mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
Move opponents function to User module
This commit is contained in:
parent
b09cb26b85
commit
a50b12b0ea
@ -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
|
||||
|
||||
@ -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{},
|
||||
%{
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user