Add embedded schema for Artikel
This commit is contained in:
64
lib/outlook/public.ex
Normal file
64
lib/outlook/public.ex
Normal file
@ -0,0 +1,64 @@
|
||||
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
|
||||
|
||||
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: [
|
||||
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)
|
||||
|> Enum.map(fn rec -> Enum.into(rec, %{}) end)
|
||||
|> Enum.map(fn map -> struct(Artikel, map) end)
|
||||
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: [
|
||||
title: t.title,
|
||||
date: t.date,
|
||||
public_content: t.public_content,
|
||||
title_org: a.title,
|
||||
url_org: a.url,
|
||||
date_org: a.date,
|
||||
author: au.name,
|
||||
author_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, struct(Artikel, artikel |> Enum.into(%{}))}
|
||||
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
|
||||
end
|
||||
Reference in New Issue
Block a user