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