Brutal legends (albums) data (#13)
* Improve Directus client event sorting and filtering * Add Directus client getters: albums, album * Rearrange home view Add brutal legends move some things around.
This commit is contained in:
parent
84f4b8007a
commit
ebff42d899
3 changed files with 89 additions and 26 deletions
|
|
@ -41,10 +41,65 @@ defmodule Mse25.Directus do
|
|||
)
|
||||
end
|
||||
|
||||
def get_events!(options \\ []) do
|
||||
def get_albums!(options \\ []) do
|
||||
params =
|
||||
[
|
||||
"sort=-started_at",
|
||||
"sort=-purchased_at",
|
||||
"fields=" <>
|
||||
Enum.join(
|
||||
[
|
||||
"purchased_at",
|
||||
"album",
|
||||
"year",
|
||||
"externalId",
|
||||
"cover.filename_download",
|
||||
"cover.width",
|
||||
"cover.height",
|
||||
"songs.title",
|
||||
"songs.artist.name"
|
||||
],
|
||||
","
|
||||
)
|
||||
]
|
||||
|> query_params_string(options, :brutal_legends)
|
||||
|
||||
get("/albums?" <> params)
|
||||
|> Enum.map(fn m = %{"songs" => [%{"artist" => %{"name" => a}} | _]} ->
|
||||
Map.put(m, "artist", a)
|
||||
end)
|
||||
end
|
||||
|
||||
def get_album(externalId) do
|
||||
get_item(
|
||||
:albums,
|
||||
externalId,
|
||||
[
|
||||
"purchased_at",
|
||||
"album",
|
||||
"year",
|
||||
"youtubeId",
|
||||
"externalId",
|
||||
"cover.filename_download",
|
||||
"cover.width",
|
||||
"cover.height",
|
||||
"songs.title",
|
||||
"songs.artist.name"
|
||||
]
|
||||
|> Enum.join(",")
|
||||
)
|
||||
end
|
||||
|
||||
def get_events!(options \\ []) do
|
||||
[sorting, filter] =
|
||||
case options[:upcoming] do
|
||||
true -> ["started_at", "1"]
|
||||
_ -> ["-started_at", "0"]
|
||||
end
|
||||
|
||||
params =
|
||||
[
|
||||
"sort=" <> sorting,
|
||||
"filter[upcoming][_eq]=" <> filter,
|
||||
"fields=" <>
|
||||
Enum.join(
|
||||
[
|
||||
|
|
@ -96,7 +151,16 @@ defmodule Mse25.Directus do
|
|||
get_item(:pages, slug)
|
||||
end
|
||||
|
||||
defp get_item(collection, slug, fields \\ "*") do
|
||||
defp get_item(collection, externalId_or_slug, fields \\ "*")
|
||||
|
||||
defp get_item(:albums, externalId, fields) do
|
||||
case get("/albums?fields=" <> fields <> "&filter[externalId][_eq]=" <> externalId) do
|
||||
[] -> {:not_found, externalId}
|
||||
[item | _] -> {:ok, item}
|
||||
end
|
||||
end
|
||||
|
||||
defp get_item(collection, slug, fields) do
|
||||
case get(
|
||||
"/" <> to_string(collection) <> "?fields=" <> fields <> "&filter[slug][_eq]=" <> slug
|
||||
) do
|
||||
|
|
@ -120,14 +184,6 @@ defmodule Mse25.Directus do
|
|||
|
||||
defp payload(%Req.Response{status: 401}), do: {:forbidden, "Invalid Directus credentials"}
|
||||
|
||||
defp query_params_string(params, options, :events),
|
||||
do:
|
||||
params
|
||||
|> upcoming?(options)
|
||||
|> limit?(options)
|
||||
|> page?(options)
|
||||
|> Enum.join("&")
|
||||
|
||||
defp query_params_string(params, options, _),
|
||||
do:
|
||||
params
|
||||
|
|
@ -148,11 +204,4 @@ defmodule Mse25.Directus do
|
|||
pg -> ["page=" <> to_string(pg) | params]
|
||||
end
|
||||
end
|
||||
|
||||
defp upcoming?(params, opts) do
|
||||
case opts[:upcoming] do
|
||||
true -> ["filter[upcoming][_eq]=1" | params]
|
||||
_ -> ["filter[upcoming][_eq]=0" | params]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ defmodule Mse25Web.PageController do
|
|||
[most_recent_article, older_article] = Directus.get_articles!(limit: 2)
|
||||
recent_event = Directus.get_events!(limit: 1)
|
||||
upcoming_events = Directus.get_events!(limit: 1, upcoming: true)
|
||||
brutal_legends = Directus.get_albums!(limit: 1)
|
||||
|
||||
render(conn, :home,
|
||||
page_title: "Anders Englöf Ytterström @ madr.se",
|
||||
|
|
@ -14,7 +15,8 @@ defmodule Mse25Web.PageController do
|
|||
recent_article: most_recent_article,
|
||||
older_article: older_article,
|
||||
recent_event: recent_event,
|
||||
upcoming: upcoming_events
|
||||
upcoming: upcoming_events,
|
||||
brutal_legends: brutal_legends
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
<main class="landing">
|
||||
<img src={~p"/images/aey.svg"} width="300" alt="Anders Englöf Ytterström" />
|
||||
<form metod="get" action="/search">
|
||||
<label for="q">Sök innehåll</label>: <input size="9" type="search" id="q" name="q" />
|
||||
<button>Sök</button>
|
||||
</form>
|
||||
<div class="tree">
|
||||
<div>
|
||||
Senast skrivet (<date><%= @recent_article["pubDate"] %></date>):<br />
|
||||
|
|
@ -14,20 +18,20 @@
|
|||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/inlagg">Webbloggen</a>
|
||||
<a href="/webblogg">Webbloggen</a>
|
||||
</div>
|
||||
<%= for event <- @recent_event do %>
|
||||
<div>
|
||||
Deltog på: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= for event <- @upcoming do %>
|
||||
<div>
|
||||
Kommande: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= for event <- @recent_event do %>
|
||||
<div>
|
||||
Tidslinjen: <a href="/inlagg">Evenemang</a>
|
||||
Upplevt: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
|
||||
</div>
|
||||
<% end %>
|
||||
<div>
|
||||
<a href="/evenemang">Evenemangstidslinje</a>
|
||||
</div>
|
||||
<div>
|
||||
Värt att uppmärksamma:
|
||||
|
|
@ -35,6 +39,14 @@
|
|||
Delningar
|
||||
</a>
|
||||
</div>
|
||||
<%= for legend <- @brutal_legends do %>
|
||||
<div>
|
||||
Införskaffat (<%= legend["purchased_at"] %>):<br />
|
||||
<a href={legend["externalId"]}>
|
||||
<%= legend["artist"] %> - <%= legend["album"] %> (<%= legend["year"] %>)
|
||||
</a>
|
||||
</div>
|
||||
<% end %>
|
||||
<div>
|
||||
<a href="/vad-jag-gor">
|
||||
Vad jag gör
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue