71 lines
2.1 KiB
Elixir
71 lines
2.1 KiB
Elixir
defmodule Odinsea.Database.Schema.Account do
|
|
@moduledoc """
|
|
Ecto schema for the accounts table.
|
|
Represents a user account in the game.
|
|
"""
|
|
|
|
use Ecto.Schema
|
|
import Ecto.Changeset
|
|
|
|
@primary_key {:id, :id, autogenerate: true}
|
|
@timestamps_opts [inserted_at: :createdat, updated_at: false]
|
|
|
|
schema "accounts" do
|
|
field(:name, :string)
|
|
field(:password, :string)
|
|
field(:salt, :string)
|
|
field(:second_password, :string, source: :second_password)
|
|
field(:second_salt, :string)
|
|
field(:loggedin, :integer, default: 0)
|
|
field(:lastlogin, :naive_datetime)
|
|
field(:createdat, :naive_datetime)
|
|
field(:birthday, :date)
|
|
field(:banned, :integer, default: 0)
|
|
field(:banreason, :string)
|
|
field(:gm, :integer, default: 0)
|
|
field(:email, :string)
|
|
field(:macs, :string)
|
|
field(:tempban, :naive_datetime)
|
|
field(:greason, :integer)
|
|
field(:acash, :integer, default: 0, source: :ACash)
|
|
field(:mpoints, :integer, default: 0, source: :mPoints)
|
|
field(:gender, :integer, default: 0)
|
|
field(:session_ip, :string, source: :SessionIP)
|
|
field(:points, :integer, default: 0)
|
|
field(:vpoints, :integer, default: 0)
|
|
field(:totalvotes, :integer, default: 0)
|
|
field(:lastlogon, :naive_datetime)
|
|
field(:lastvoteip, :string)
|
|
|
|
has_many(:characters, Odinsea.Database.Schema.Character, foreign_key: :accountid)
|
|
end
|
|
|
|
@doc """
|
|
Changeset for account registration.
|
|
"""
|
|
def registration_changeset(account, attrs) do
|
|
account
|
|
|> cast(attrs, [:name, :password, :salt, :birthday, :gender, :email])
|
|
|> validate_required([:name, :password, :salt])
|
|
|> validate_length(:name, min: 3, max: 13)
|
|
|> validate_format(:name, ~r/^[a-zA-Z0-9]+$/, message: "only letters and numbers allowed")
|
|
|> unique_constraint(:name)
|
|
end
|
|
|
|
@doc """
|
|
Changeset for login updates (last login time, IP, etc).
|
|
"""
|
|
def login_changeset(account, attrs) do
|
|
account
|
|
|> cast(attrs, [:loggedin, :lastlogin, :session_ip])
|
|
end
|
|
|
|
@doc """
|
|
Changeset for ban updates.
|
|
"""
|
|
def ban_changeset(account, attrs) do
|
|
account
|
|
|> cast(attrs, [:banned, :banreason, :tempban, :greason])
|
|
end
|
|
end
|