From bdf99b4ee989df1813745e1dfd2983689b09ca85 Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Tue, 17 Jan 2023 14:00:18 -0700 Subject: Persistent game (#5) * Remove unnecessary server in board * Initial persistent games * Remove done chessh README stuff, warning issue * Show current players and move * Add promotion * Merge default changeset on all status --- lib/chessh/schema/game.ex | 32 ++++++++++++++++++++++++++++++++ lib/chessh/schema/player.ex | 5 ++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 lib/chessh/schema/game.ex (limited to 'lib/chessh/schema') diff --git a/lib/chessh/schema/game.ex b/lib/chessh/schema/game.ex new file mode 100644 index 0000000..b6ff327 --- /dev/null +++ b/lib/chessh/schema/game.ex @@ -0,0 +1,32 @@ +defmodule Chessh.Game do + alias Chessh.Player + use Ecto.Schema + import Ecto.Changeset + + schema "games" do + field(:fen, :string) + field(:moves, :integer, default: 0) + + field(:turn, Ecto.Enum, values: [:light, :dark], default: :light) + field(:winner, Ecto.Enum, values: [:light, :dark, :none], default: :none) + field(:status, Ecto.Enum, values: [:continue, :draw, :winner], default: :continue) + + belongs_to(:light_player, Player, foreign_key: :light_player_id) + belongs_to(:dark_player, Player, foreign_key: :dark_player_id) + + timestamps() + end + + def changeset(game, attrs) do + game + |> cast(attrs, [ + :fen, + :moves, + :turn, + :winner, + :status, + :light_player_id, + :dark_player_id + ]) + end +end diff --git a/lib/chessh/schema/player.ex b/lib/chessh/schema/player.ex index 8eaffee..074ea4e 100644 --- a/lib/chessh/schema/player.ex +++ b/lib/chessh/schema/player.ex @@ -1,6 +1,7 @@ defmodule Chessh.Player do use Ecto.Schema import Ecto.Changeset + alias Chessh.{Key, Game} @derive {Inspect, except: [:password]} schema "players" do @@ -11,7 +12,9 @@ defmodule Chessh.Player do field(:authentications, :integer, default: 0) - has_many(:keys, Chessh.Key) + has_many(:keys, Key) + has_many(:light_games, Game, foreign_key: :light_player_id, references: :id) + has_many(:dark_games, Game, foreign_key: :dark_player_id, references: :id) timestamps() end -- cgit v1.2.3-70-g09d2