defmodule Frenzy.Feed do use Ecto.Schema import Ecto.Changeset alias FrenzyWeb.Router.Helpers, as: Routes alias FrenzyWeb.Endpoint def to_fever(feed) do %{ id: feed.id, favicon_id: feed.id, title: feed.title, url: feed.feed_url, site_url: feed.site_url, last_updated_on_time: Timex.to_unix(feed.last_updated), is_spark: false } end def to_fervor(feed) do %{ id: feed.id, title: feed.title, url: feed.site_url, feed_url: feed.feed_url, service_url: Application.get_env(:frenzy, :base_url) <> Routes.feed_path(Endpoint, :show, feed.id), last_updated: DateTime.to_iso8601(feed.last_updated), group_ids: [feed.group_id] } end schema "feeds" do field :feed_url, :string field :last_updated, :utc_datetime field :site_url, :string field :title, :string field :filter_enabled, :boolean field :scrape_remote_content, :boolean belongs_to :group, Frenzy.Group has_many :items, Frenzy.Item, on_delete: :delete_all has_one :filter, Frenzy.Filter, on_delete: :delete_all has_many :pipeline_stages, Frenzy.PipelineStage, on_delete: :delete_all timestamps() end @type t() :: %__MODULE__{ __meta__: Ecto.Schema.Metadata.t(), id: integer() | nil, feed_url: String.t(), last_updated: DateTime.t() | nil, site_url: String.t() | nil, title: String.t() | nil, filter_enabled: boolean(), scrape_remote_content: boolean(), group: Frenzy.Group.t() | Ecto.Association.NotLoaded.t(), items: [Frenzy.Item.t()] | Ecto.Association.NotLoaded.t(), filter: Frenzy.Filter.t() | Ecto.Association.NotLoaded.t(), pipeline_stages: [Frenzy.PipelineStage.t()] | Ecto.Association.NotLoaded.t(), inserted_at: NaiveDateTime.t(), updated_at: NaiveDateTime.t() } @doc false def changeset(feed, attrs) do feed |> cast(attrs, [ :title, :feed_url, :site_url, :last_updated, :filter_enabled, :scrape_remote_content ]) |> cast_assoc(:filter, required: true) |> validate_required([:feed_url, :filter]) end end