35 lines
819 B
Elixir
35 lines
819 B
Elixir
defmodule Outlook.Autoren do
|
|
@moduledoc """
|
|
The Autoren context.
|
|
"""
|
|
|
|
import Ecto.Query, warn: false
|
|
alias Outlook.Repo
|
|
|
|
alias Outlook.Articles.Article
|
|
alias Outlook.Translations.Translation
|
|
|
|
alias Outlook.Authors.Author
|
|
|
|
def list_autoren do
|
|
Repo.all(Author)
|
|
end
|
|
|
|
def get_autor!(id) do
|
|
Repo.get!(Author, id)
|
|
|> Repo.preload([articles: [:translations]])
|
|
end
|
|
|
|
@doc "This is ugly"
|
|
def list_artikel(author) when is_struct(author), do: list_artikel(author.id)
|
|
def list_artikel(author_id) do
|
|
aids = Repo.all(from a in Article,
|
|
select: [:id],
|
|
where: a.author_id == ^author_id)
|
|
|> Enum.map(fn a -> a.id end)
|
|
Repo.all(from t in Translation,
|
|
select: [t.title, t.teaser, t.date, t.user_id],
|
|
where: t.article_id in ^aids and t.public == true)
|
|
end
|
|
end
|