defmodule Zoonk.Content.Course do
@moduledoc """
Course schema.
"""
use Ecto.Schema
import Ecto.Changeset
import ZoonkWeb.Shared.Validators
alias Zoonk.Content.Course.Config
alias Zoonk.Content.CourseUser
alias Zoonk.Content.Lesson
alias Zoonk.Organizations.School
alias ZoonkWeb.Plugs.Translate
@type t :: %__MODULE__{}
schema "courses" do
field :cover, :string
field :description, :string
field :language, Ecto.Enum, values: Translate.supported_locales()
field :level, Ecto.Enum, values: Config.level_keys(), default: :beginner
field :name, :string
field :public?, :boolean, default: false
field :published?, :boolean, default: false
field :slug, :string
belongs_to :school, School
has_many :lessons, Lesson
has_many :users, CourseUser
timestamps(type: :utc_datetime_usec)
end
@doc false
@spec changeset(Ecto.Schema.t(), map()) :: Ecto.Changeset.t()
def changeset(course, attrs) do
course
|> cast(attrs, [:cover, :description, :language, :level, :name, :public?, :published?, :school_id, :slug])
|> validate_required([:description, :language, :name, :school_id, :slug])
|> validate_slug(:slug)
|> unsafe_validate_unique([:slug, :school_id], Zoonk.Repo)
|> unique_constraint([:slug, :school_id])
end
end