72 lines
1.8 KiB
Elixir
72 lines
1.8 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: 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
|
|
|
|
belongs_to :group, Frenzy.Group
|
|
|
|
has_many :items, Frenzy.Item, 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,
|
|
group: Frenzy.Group.t() | Ecto.Association.NotLoaded.t(),
|
|
items: [Frenzy.Item.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
|
|
])
|
|
|> validate_required([:feed_url])
|
|
end
|
|
end
|