lib/remedy/schema/role.ex

defmodule Remedy.Schema.Role do
  @moduledoc """
  Role
  """
  use Remedy.Schema

  @type t :: %__MODULE__{
          name: String.t(),
          color: integer(),
          hoist: boolean(),
          position: integer(),
          permissions: String.t(),
          managed: boolean(),
          mentionable: boolean(),
          guild: Guild.t()
        }

  @primary_key {:id, :id, autogenerate: false}
  schema "roles" do
    field :name, :string
    field :color, :integer
    field :hoist, :boolean
    field :position, :integer
    field :permissions, :integer
    field :managed, :boolean
    field :mentionable, :boolean
    belongs_to :guild, Guild
    # field :tags,  :	role tags object	the tags this role has
  end

  def changeset(model \\ %__MODULE__{}, params) do
    fields = __MODULE__.__schema__(:fields)
    embeds = __MODULE__.__schema__(:embeds)
    cast_model = cast(model, params, fields -- embeds)

    Enum.reduce(embeds, cast_model, fn embed, cast_model ->
      cast_embed(cast_model, embed)
    end)
  end
end