Clone
defmodule PiDay.Game.Score do
  use Ecto.Schema
  import Ecto.Changeset

  @primary_key {:id, :binary_id, autogenerate: true}
  @foreign_key_type :binary_id

  schema "game_scores" do
    field :game_type, :string
    field :score, :integer, default: 0
    field :metadata, :map, default: %{}

    belongs_to :player, PiDay.Game.Player

    timestamps(type: :utc_datetime, updated_at: false)
  end

  @game_types ~w(pi_memory monte_carlo slice_the_pi pi_trivia projectile_pi)

  def changeset(score, attrs) do
    score
    |> cast(attrs, [:player_id, :game_type, :score, :metadata])
    |> validate_required([:player_id, :game_type, :score])
    |> validate_inclusion(:game_type, @game_types)
    |> foreign_key_constraint(:player_id)
  end
end