defmodule MishkaInstaller.Database.ActivitySchema do @moduledoc """ This module has been implemented to create the `Activities` table schema. """ use Ecto.Schema import Ecto.Changeset @primary_key {:id, :binary_id, autogenerate: true} @foreign_key_type :binary_id schema "activities" do field(:type, MishkaInstaller.ActivitiesTypeEnum) field(:section, MishkaInstaller.ActivitiesSectionEnum) field(:section_id, :binary_id, primary_key: false) field(:priority, MishkaInstaller.ContentPriorityEnum) field(:status, MishkaInstaller.ActivitiesStatusEnum) field(:action, MishkaInstaller.ActivitiesActionEnum) field(:extra, :map) timestamps(type: :utc_datetime) end @all_fields ~w(type section section_id priority status action extra)a @all_required ~w(type section priority status action)a @spec changeset(struct(), map()) :: Ecto.Changeset.t() def changeset(struct, params \\ %{}) do struct |> cast(params, @all_fields) |> validate_required(@all_required, message: Gettext.dgettext( MishkaInstaller.gettext(), "mishka_installer", "You should fill all the required fields." ) ) |> MishkaInstaller.Database.Helper.validate_binary_id(:section_id) end end