37 lines
931 B
Elixir
37 lines
931 B
Elixir
defmodule BdfrBrowser.Subreddit do
|
|
use Ecto.Schema
|
|
|
|
import Ecto.Query, only: [from: 2]
|
|
|
|
alias BdfrBrowser.Post
|
|
|
|
schema "subreddits" do
|
|
field :name, :string
|
|
|
|
has_many :posts, Post
|
|
end
|
|
|
|
def multiple_names(names) do
|
|
from(s in __MODULE__, where: s.name in ^names)
|
|
end
|
|
|
|
def names do
|
|
from(s in __MODULE__, select: s.name, order_by: [asc: fragment("lower(?)", s.name)])
|
|
end
|
|
|
|
def names_without(hidden) do
|
|
from(s in __MODULE__, select: s.name, where: s.name not in ^hidden, order_by: [asc: fragment("lower(?)", s.name)])
|
|
end
|
|
|
|
def statistics(subreddit) when is_binary(subreddit), do: statistics([subreddit])
|
|
|
|
def statistics(subreddits) when is_list(subreddits) do
|
|
from(s in __MODULE__,
|
|
join: p in assoc(s, :posts),
|
|
left_join: c in assoc(p, :comments),
|
|
select: {s.name, count(p.id), count(c.id)},
|
|
where: s.name in ^subreddits,
|
|
group_by: [s.name]
|
|
)
|
|
end
|
|
end
|