95 lines
2.4 KiB
Elixir
95 lines
2.4 KiB
Elixir
defmodule Outlook.Public do
|
|
@moduledoc """
|
|
This should replace Outlook.Artikel and Outlook.Autoren for
|
|
both of which embedded schemas should be created, for Artikel the schema should
|
|
implement to_param protocol (no more needed for Outlook.Translations.Translation then).
|
|
"""
|
|
|
|
alias Outlook.Translations.Translation
|
|
alias Outlook.Articles.Article
|
|
alias Outlook.Authors.Author
|
|
alias Outlook.Public.{Artikel,Autor}
|
|
|
|
import Ecto.Query, warn: false
|
|
alias Outlook.Repo
|
|
|
|
def list_artikel(language \\ "DE") do
|
|
q = from t in Translation,
|
|
join: a in Article, on: t.article_id == a.id,
|
|
join: au in Author, on: a.author_id == au.id,
|
|
select: %Artikel{
|
|
title: t.title,
|
|
date: t.date,
|
|
teaser: t.teaser,
|
|
id: t.id,
|
|
date_org: a.date,
|
|
autor_name: au.name,
|
|
},
|
|
where: t.public == true and t.language == ^language,
|
|
order_by: [desc: t.date]
|
|
Repo.all(q)
|
|
end
|
|
|
|
def get_artikel!(artikel) when is_struct(artikel), do: get_artikel!(artikel.id)
|
|
def get_artikel!(id) do
|
|
q = from t in Translation,
|
|
join: a in Article, on: t.article_id == a.id,
|
|
join: au in Author, on: a.author_id == au.id,
|
|
select: %Artikel{
|
|
title: t.title,
|
|
date: t.date,
|
|
public_content: t.public_content,
|
|
title_org: a.title,
|
|
url_org: a.url,
|
|
date_org: a.date,
|
|
autor_name: au.name,
|
|
autor_id: au.id
|
|
},
|
|
where: t.id == ^id and t.public == true
|
|
case Repo.one(q) do
|
|
nil -> {:error, "Artikel does not exist, or isn't public."}
|
|
artikel -> {:ok, artikel}
|
|
end
|
|
end
|
|
|
|
def get_artikel_by_tid(tid) do
|
|
tid
|
|
|> String.split(~r/--(?=[0-9A-Za-z])/)
|
|
|> List.last()
|
|
|> String.to_integer(36)
|
|
|> get_artikel!()
|
|
end
|
|
|
|
# for /autoren/
|
|
|
|
def list_autoren do
|
|
Repo.all(Author)
|
|
end
|
|
|
|
def get_autor!(id) do
|
|
q = from au in Author,
|
|
select: %Autor{
|
|
name: au.name,
|
|
description: au.description,
|
|
homepage_name: au.homepage_name,
|
|
homepage_url: au.homepage_url,
|
|
},
|
|
where: au.id == ^id
|
|
autor = Repo.one(q)
|
|
|
|
q2 = from a in Article,
|
|
join: t in Translation, on: t.article_id == a.id,
|
|
select: %Artikel{
|
|
title: t.title,
|
|
date: t.date,
|
|
teaser: t.teaser,
|
|
id: t.id,
|
|
date_org: a.date
|
|
},
|
|
where: a.author_id == ^id and t.public == true
|
|
artikel = Repo.all(q2)
|
|
|
|
%Autor{autor | artikel: artikel}
|
|
end
|
|
end
|