frenzy/lib/frenzy/feed.ex

87 lines
2.4 KiB
Elixir
Raw Permalink Normal View History

2019-02-11 22:22:35 +00:00
defmodule Frenzy.Feed do
use Ecto.Schema
import Ecto.Changeset
2019-03-31 14:52:56 +00:00
alias FrenzyWeb.Router.Helpers, as: Routes
alias FrenzyWeb.Endpoint
2019-02-11 22:22:35 +00:00
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)),
2019-02-11 22:22:35 +00:00
is_spark: false
}
end
2019-03-31 14:52:56 +00:00
def to_fervor(feed) do
%{
2021-10-30 17:52:27 +00:00
id: feed.id |> Integer.to_string(),
2019-03-31 14:52:56 +00:00
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),
2021-10-30 17:52:27 +00:00
group_ids: [feed.group_id |> Integer.to_string()]
2019-03-31 14:52:56 +00:00
}
end
2019-02-11 22:22:35 +00:00
schema "feeds" do
field :feed_url, :string
field :last_updated, :utc_datetime
field :site_url, :string
field :title, :string
2019-11-10 19:04:00 +00:00
field :favicon, :string
field :favicon_url, :string
field :last_refreshed_at, :utc_datetime
field :refresh_frequency, :integer, default: 30
2019-02-11 22:22:35 +00:00
2019-03-21 23:21:56 +00:00
belongs_to :group, Frenzy.Group
belongs_to :pipeline, Frenzy.Pipeline
2019-03-21 23:21:56 +00:00
2019-02-11 22:22:35 +00:00
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,
2019-11-10 19:04:00 +00:00
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()
}
2019-02-11 22:22:35 +00:00
@doc false
def changeset(feed, attrs) do
feed
2019-07-09 02:41:18 +00:00
|> cast(attrs, [
:title,
:feed_url,
:site_url,
:last_updated,
2019-11-10 19:04:00 +00:00
:pipeline_id,
:favicon,
:favicon_url,
:last_refreshed_at,
:refresh_frequency
2019-07-09 02:41:18 +00:00
])
|> validate_required([:feed_url])
|> validate_inclusion(:refresh_frequency, [30 * 60, 60 * 60, 6 * 60 * 60, 24 * 60 * 60])
2019-02-11 22:22:35 +00:00
end
end