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

Refactor Game controller queries

This commit is contained in:
Daniel Barber 2018-02-21 22:30:44 -05:00
parent 7d31ebdc98
commit 66c2bf2817
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
3 changed files with 14 additions and 15 deletions

View File

@ -8,6 +8,7 @@ defmodule Chess.Store.Game do
import Ecto.Query import Ecto.Query
alias Chess.Board alias Chess.Board
alias Chess.Store.Game
schema "games" do schema "games" do
field :board, :map field :board, :map
@ -34,11 +35,10 @@ defmodule Chess.Store.Game do
|> validate_required([:board, :user_id, :opponent_id]) |> validate_required([:board, :user_id, :opponent_id])
end end
def for_user(query, user) do def for_user(user) do
query from game in Game,
|> where([game], user_id: ^user.id) where: game.user_id == ^user.id,
|> or_where([game], opponent_id: ^user.id) or_where: game.opponent_id == ^user.id
|> preload([:user, :opponent])
end end
def ordered(query) do def ordered(query) do

View File

@ -6,9 +6,7 @@ defmodule ChessWeb.Api.GameController do
import Chess.Auth, only: [current_user: 1] import Chess.Auth, only: [current_user: 1]
def show(conn, %{"id" => id}) do def show(conn, %{"id" => id}) do
query = query = Game.for_user(current_user(conn))
from(game in Game, preload: [:user, :opponent])
|> Game.for_user(current_user(conn))
game = game =
query query
|> Repo.get!(id) |> Repo.get!(id)
@ -17,9 +15,7 @@ defmodule ChessWeb.Api.GameController do
end end
def update(conn, %{"id" => id, "move" => move_params}) do def update(conn, %{"id" => id, "move" => move_params}) do
query = query = Game.for_user(current_user(conn))
from(game in Game, preload: [:user, :opponent])
|> Game.for_user(current_user(conn))
game = game =
query query
|> Repo.get!(id) |> Repo.get!(id)

View File

@ -8,8 +8,9 @@ defmodule ChessWeb.GameController do
def index(conn, _params) do def index(conn, _params) do
changeset = Game.changeset(%Game{}) changeset = Game.changeset(%Game{})
games = games =
Game conn
|> Game.for_user(current_user(conn)) |> current_user()
|> Game.for_user()
|> Game.ordered |> Game.ordered
|> Repo.all |> Repo.all
@ -45,8 +46,10 @@ defmodule ChessWeb.GameController do
def show(conn, %{"id" => id}) do def show(conn, %{"id" => id}) do
query = query =
from(game in Game, preload: [:user, :opponent]) conn
|> Game.for_user(current_user(conn)) |> current_user()
|> Game.for_user()
|> preload([:user, :opponent])
game = game =
query query
|> Repo.get!(id) |> Repo.get!(id)