diff --git a/lib/mse25/directus.ex b/lib/mse25/directus.ex index b62c4e8..a6b4952 100644 --- a/lib/mse25/directus.ex +++ b/lib/mse25/directus.ex @@ -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 diff --git a/lib/mse25_web/controllers/page_controller.ex b/lib/mse25_web/controllers/page_controller.ex index daa30e9..a71ac7e 100644 --- a/lib/mse25_web/controllers/page_controller.ex +++ b/lib/mse25_web/controllers/page_controller.ex @@ -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 diff --git a/lib/mse25_web/controllers/page_html/home.html.heex b/lib/mse25_web/controllers/page_html/home.html.heex index 28cc2af..939fdaa 100644 --- a/lib/mse25_web/controllers/page_html/home.html.heex +++ b/lib/mse25_web/controllers/page_html/home.html.heex @@ -1,5 +1,9 @@
Anders Englöf Ytterström +
+ : + +
Senast skrivet (<%= @recent_article["pubDate"] %>):
@@ -14,20 +18,20 @@
- Webbloggen + Webbloggen
- <%= for event <- @recent_event do %> -
- Deltog på: <%= event["title"] %>
<%= event["lead"] %>
-
- <% end %> <%= for event <- @upcoming do %>
Kommande: <%= event["title"] %>
<%= event["lead"] %>
<% end %> + <%= for event <- @recent_event do %> +
+ Upplevt: <%= event["title"] %>
<%= event["lead"] %>
+
+ <% end %>
- Tidslinjen: Evenemang + Evenemangstidslinje
Värt att uppmärksamma: @@ -35,6 +39,14 @@ Delningar
+ <%= for legend <- @brutal_legends do %> +
+ Införskaffat (<%= legend["purchased_at"] %>):
+ + <%= legend["artist"] %> - <%= legend["album"] %> (<%= legend["year"] %>) + +
+ <% end %>
Vad jag gör