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:
Anders Englöf Ytterström 2024-10-03 09:55:44 +02:00 committed by GitHub
parent 84f4b8007a
commit ebff42d899
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 89 additions and 26 deletions

View file

@ -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

View file

@ -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

View file

@ -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>
Upplevt: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
</div>
<% end %>
<div>
Tidslinjen: <a href="/inlagg">Evenemang</a>
<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