2019-02-11 22:22:35 +00:00
|
|
|
defmodule Frenzy.Item do
|
|
|
|
use Ecto.Schema
|
|
|
|
import Ecto.Changeset
|
2021-09-09 00:10:19 +00:00
|
|
|
import Ecto.Query
|
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(item) do
|
2020-01-13 02:51:58 +00:00
|
|
|
res = %{
|
2019-02-11 22:22:35 +00:00
|
|
|
id: item.id,
|
|
|
|
feed_id: item.feed_id,
|
|
|
|
title: item.title,
|
|
|
|
author: item.creator,
|
|
|
|
html: item.content,
|
|
|
|
url: item.url,
|
|
|
|
is_saved: 0,
|
2020-01-13 02:51:58 +00:00
|
|
|
is_read: if(item.read, do: 1, else: 0)
|
2019-02-11 22:22:35 +00:00
|
|
|
}
|
2020-01-13 02:51:58 +00:00
|
|
|
|
|
|
|
if item.date do
|
|
|
|
Map.put(res, :created_on_time, Timex.to_unix(item.date))
|
|
|
|
else
|
|
|
|
res
|
|
|
|
end
|
2019-02-11 22:22:35 +00:00
|
|
|
end
|
|
|
|
|
2019-03-31 14:52:56 +00:00
|
|
|
def to_fervor(item) do
|
2020-01-13 02:51:58 +00:00
|
|
|
res = %{
|
2021-10-30 17:52:27 +00:00
|
|
|
id: item.id |> Integer.to_string(),
|
|
|
|
feed_id: item.feed_id |> Integer.to_string(),
|
2019-03-31 14:52:56 +00:00
|
|
|
title: item.title,
|
|
|
|
author: item.creator,
|
|
|
|
content: item.content,
|
|
|
|
url: item.url,
|
|
|
|
service_url:
|
|
|
|
Application.get_env(:frenzy, :base_url) <> Routes.item_path(Endpoint, :show, item.id),
|
|
|
|
read: item.read
|
|
|
|
}
|
2020-01-13 02:51:58 +00:00
|
|
|
|
|
|
|
if item.date do
|
2022-01-12 23:01:35 +00:00
|
|
|
Map.put(res, :published, DateTime.to_iso8601(item.date))
|
2020-01-13 02:51:58 +00:00
|
|
|
else
|
|
|
|
res
|
|
|
|
end
|
2019-03-31 14:52:56 +00:00
|
|
|
end
|
|
|
|
|
2019-02-11 22:22:35 +00:00
|
|
|
schema "items" do
|
|
|
|
field :content, :string
|
2020-07-19 02:18:41 +00:00
|
|
|
field :content_type, :string
|
2019-02-11 22:22:35 +00:00
|
|
|
field :date, :utc_datetime
|
|
|
|
field :creator, :string
|
|
|
|
field :guid, :string
|
|
|
|
field :url, :string
|
|
|
|
field :read, :boolean, default: false
|
|
|
|
field :read_date, :utc_datetime
|
|
|
|
field :title, :string
|
2019-03-14 23:48:46 +00:00
|
|
|
field :tombstone, :boolean, default: false
|
|
|
|
|
2019-02-11 22:22:35 +00:00
|
|
|
belongs_to :feed, Frenzy.Feed
|
|
|
|
|
|
|
|
timestamps()
|
|
|
|
end
|
|
|
|
|
2019-08-30 23:31:38 +00:00
|
|
|
@type t() :: %__MODULE__{
|
|
|
|
__meta__: Ecto.Schema.Metadata.t(),
|
|
|
|
id: integer() | nil,
|
|
|
|
content: String.t(),
|
2020-07-19 02:18:41 +00:00
|
|
|
content_type: String.t() | nil,
|
2020-01-30 02:59:50 +00:00
|
|
|
date: DateTime.t(),
|
2019-08-30 23:31:38 +00:00
|
|
|
creator: String.t(),
|
|
|
|
guid: String.t(),
|
|
|
|
url: String.t(),
|
|
|
|
read: boolean(),
|
|
|
|
read_date: DateTime.t(),
|
2019-11-10 16:48:08 +00:00
|
|
|
title: String.t() | nil,
|
2019-08-30 23:31:38 +00:00
|
|
|
tombstone: boolean(),
|
|
|
|
feed: Frenzy.Feed.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(item, attrs) do
|
|
|
|
item
|
2021-09-12 23:55:19 +00:00
|
|
|
|> cast(attrs, [
|
|
|
|
:guid,
|
|
|
|
:title,
|
|
|
|
:url,
|
|
|
|
:creator,
|
|
|
|
:date,
|
|
|
|
:content,
|
|
|
|
:read,
|
|
|
|
:read_date,
|
|
|
|
:tombstone,
|
|
|
|
:feed_id
|
|
|
|
])
|
|
|
|
|> validate_required([:guid, :url, :date, :content, :feed_id])
|
|
|
|
|> unique_constraint([:feed_id, :guid], name: :items_feed_guid_index)
|
2021-09-08 13:35:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def exists?(feed_id, guid) do
|
2021-09-09 00:10:19 +00:00
|
|
|
Frenzy.Repo.exists?(from i in __MODULE__, where: i.feed_id == ^feed_id and i.guid == ^guid)
|
2019-02-11 22:22:35 +00:00
|
|
|
end
|
|
|
|
end
|