frenzy/lib/frenzy/feed.ex

87 lines
2.4 KiB
Elixir

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:
if(is_nil(feed.last_updated), do: 0, else: Timex.to_unix(feed.last_updated)),
is_spark: false
}
end
def to_fervor(feed) do
%{
id: feed.id |> Integer.to_string(),
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 |> Integer.to_string()]
}
end
schema "feeds" do
field :feed_url, :string
field :last_updated, :utc_datetime
field :site_url, :string
field :title, :string
field :favicon, :string
field :favicon_url, :string
field :last_refreshed_at, :utc_datetime
field :refresh_frequency, :integer, default: 30
belongs_to :group, Frenzy.Group
belongs_to :pipeline, Frenzy.Pipeline
has_many :items, Frenzy.Item, 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,
favicon: String.t() | nil,
favicon_url: String.t() | nil,
last_refreshed_at: DateTime.t() | nil,
refresh_frequency: integer(),
group: Frenzy.Group.t() | Ecto.Association.NotLoaded.t(),
pipeline: Frenzy.Pipeline.t() | nil | Ecto.Association.NotLoaded.t(),
items: [Frenzy.Item.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,
:pipeline_id,
:favicon,
:favicon_url,
:last_refreshed_at,
:refresh_frequency
])
|> validate_required([:feed_url])
|> validate_inclusion(:refresh_frequency, [30 * 60, 60 * 60, 6 * 60 * 60, 24 * 60 * 60])
end
end