defmodule Mobilizon.Events.Session do @moduledoc """ Represents a session for an event (such as a talk at a conference). """ use Ecto.Schema import Ecto.Changeset alias Mobilizon.Events.{Event, Track} @type t :: %__MODULE__{ audios_urls: String.t(), language: String.t(), long_abstract: String.t(), short_abstract: String.t(), slides_url: String.t(), subtitle: String.t(), title: String.t(), videos_urls: String.t(), begins_on: DateTime.t(), ends_on: DateTime.t(), event: Event.t(), track: Track.t() } @required_attrs [ :title, :subtitle, :short_abstract, :long_abstract, :language, :slides_url, :videos_urls, :audios_urls ] @optional_attrs [:event_id, :track_id] @attrs @required_attrs ++ @optional_attrs schema "sessions" do field(:audios_urls, :string) field(:language, :string) field(:long_abstract, :string) field(:short_abstract, :string) field(:slides_url, :string) field(:subtitle, :string) field(:title, :string) field(:videos_urls, :string) field(:begins_on, :utc_datetime) field(:ends_on, :utc_datetime) belongs_to(:event, Event) belongs_to(:track, Track) timestamps() end @doc false @spec changeset(t | Ecto.Schema.t(), map) :: Ecto.Changeset.t() def changeset(%__MODULE__{} = session, attrs) do session |> cast(attrs, @attrs) |> validate_required(@required_attrs) end end