Packages
Mishka Installer is a system plugin manager and run time installer for elixir.
Current section
Files
Jump to
Current section
Files
lib/plugin_manager/database/plugin_schema.ex
defmodule MishkaInstaller.Database.PluginSchema do
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "plugins" do
field :name, :string, null: false
field :event, :string, null: false
field :priority, :integer, null: false
field :status, MishkaInstaller.PluginStatusEnum, null: false, default: :started
field :depend_type, MishkaInstaller.PluginDependTypeEnum, null: false, default: :soft
field :depends, {:array, :string}, null: true
field :extra, {:array, :map}, null: false
timestamps(type: :utc_datetime)
end
@all_fields ~w(name event priority status depend_type depends extra)a
@required_fields ~w(name event priority status depend_type)a
@spec changeset(struct(), map()) :: Ecto.Changeset.t()
def changeset(struct, params \\ %{}) do
struct
|> cast(params, @all_fields)
|> validate_required(@required_fields, message: "You should fill all the required fields.")
|> unique_constraint(:name, name: :index_plugins_on_name, message: "Each plugin should have a unique name, this name existed before.")
end
end