defmodule Odinsea.Database.Schema.Guild do @moduledoc """ Ecto schema for the guilds table. Represents guild data in the game. """ use Ecto.Schema import Ecto.Changeset @primary_key {:guildid, :id, autogenerate: true} schema "guilds" do field :leader, :integer, default: 0 field :gp, :integer, default: 0, source: :GP field :logo, :integer field :logo_color, :integer, default: 0, source: :logoColor field :name, :string field :rank1title, :string, default: "Master" field :rank2title, :string, default: "Jr. Master" field :rank3title, :string, default: "Member" field :rank4title, :string, default: "Member" field :rank5title, :string, default: "Member" field :capacity, :integer, default: 10 field :logo_bg, :integer, source: :logoBG field :logo_bg_color, :integer, default: 0, source: :logoBGColor field :notice, :string field :signature, :integer, default: 0 field :alliance, :integer, default: 0 has_many :guild_skills, Odinsea.Database.Schema.GuildSkill, foreign_key: :guildid end @doc """ Changeset for creating a guild. """ def creation_changeset(guild, attrs) do guild |> cast(attrs, [:leader, :name, :capacity, :logo, :logo_color, :logo_bg, :logo_bg_color]) |> validate_required([:leader, :name]) |> validate_length(:name, min: 1, max: 45) |> unique_constraint(:name) end @doc """ Changeset for updating guild settings. """ def settings_changeset(guild, attrs) do guild |> cast(attrs, [ :rank1title, :rank2title, :rank3title, :rank4title, :rank5title, :capacity, :notice, :signature, :alliance ]) end @doc """ Changeset for updating guild leader. """ def leader_changeset(guild, attrs) do guild |> cast(attrs, [:leader]) |> validate_required([:leader]) end end