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
|
end
|
||||||
|
|
||||||
def get_events!(options \\ []) do
|
def get_albums!(options \\ []) do
|
||||||
params =
|
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=" <>
|
"fields=" <>
|
||||||
Enum.join(
|
Enum.join(
|
||||||
[
|
[
|
||||||
|
|
@ -96,7 +151,16 @@ defmodule Mse25.Directus do
|
||||||
get_item(:pages, slug)
|
get_item(:pages, slug)
|
||||||
end
|
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(
|
case get(
|
||||||
"/" <> to_string(collection) <> "?fields=" <> fields <> "&filter[slug][_eq]=" <> slug
|
"/" <> to_string(collection) <> "?fields=" <> fields <> "&filter[slug][_eq]=" <> slug
|
||||||
) do
|
) do
|
||||||
|
|
@ -120,14 +184,6 @@ defmodule Mse25.Directus do
|
||||||
|
|
||||||
defp payload(%Req.Response{status: 401}), do: {:forbidden, "Invalid Directus credentials"}
|
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, _),
|
defp query_params_string(params, options, _),
|
||||||
do:
|
do:
|
||||||
params
|
params
|
||||||
|
|
@ -148,11 +204,4 @@ defmodule Mse25.Directus do
|
||||||
pg -> ["page=" <> to_string(pg) | params]
|
pg -> ["page=" <> to_string(pg) | params]
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ defmodule Mse25Web.PageController do
|
||||||
[most_recent_article, older_article] = Directus.get_articles!(limit: 2)
|
[most_recent_article, older_article] = Directus.get_articles!(limit: 2)
|
||||||
recent_event = Directus.get_events!(limit: 1)
|
recent_event = Directus.get_events!(limit: 1)
|
||||||
upcoming_events = Directus.get_events!(limit: 1, upcoming: true)
|
upcoming_events = Directus.get_events!(limit: 1, upcoming: true)
|
||||||
|
brutal_legends = Directus.get_albums!(limit: 1)
|
||||||
|
|
||||||
render(conn, :home,
|
render(conn, :home,
|
||||||
page_title: "Anders Englöf Ytterström @ madr.se",
|
page_title: "Anders Englöf Ytterström @ madr.se",
|
||||||
|
|
@ -14,7 +15,8 @@ defmodule Mse25Web.PageController do
|
||||||
recent_article: most_recent_article,
|
recent_article: most_recent_article,
|
||||||
older_article: older_article,
|
older_article: older_article,
|
||||||
recent_event: recent_event,
|
recent_event: recent_event,
|
||||||
upcoming: upcoming_events
|
upcoming: upcoming_events,
|
||||||
|
brutal_legends: brutal_legends
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
<main class="landing">
|
<main class="landing">
|
||||||
<img src={~p"/images/aey.svg"} width="300" alt="Anders Englöf Ytterström" />
|
<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 class="tree">
|
||||||
<div>
|
<div>
|
||||||
Senast skrivet (<date><%= @recent_article["pubDate"] %></date>):<br />
|
Senast skrivet (<date><%= @recent_article["pubDate"] %></date>):<br />
|
||||||
|
|
@ -14,20 +18,20 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="/inlagg">Webbloggen</a>
|
<a href="/webblogg">Webbloggen</a>
|
||||||
</div>
|
</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 %>
|
<%= for event <- @upcoming do %>
|
||||||
<div>
|
<div>
|
||||||
Kommande: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
|
Kommande: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<%= for event <- @recent_event do %>
|
||||||
|
<div>
|
||||||
|
Upplevt: <a href={event["slug"]}><%= event["title"] %><br /><%= event["lead"] %></a>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
<div>
|
<div>
|
||||||
Tidslinjen: <a href="/inlagg">Evenemang</a>
|
<a href="/evenemang">Evenemangstidslinje</a>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
Värt att uppmärksamma:
|
Värt att uppmärksamma:
|
||||||
|
|
@ -35,6 +39,14 @@
|
||||||
Delningar
|
Delningar
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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>
|
<div>
|
||||||
<a href="/vad-jag-gor">
|
<a href="/vad-jag-gor">
|
||||||
Vad jag gör
|
Vad jag gör
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue