diff --git a/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_metadata.ex b/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_metadata.ex new file mode 100644 index 0000000..7261ada --- /dev/null +++ b/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_metadata.ex @@ -0,0 +1,27 @@ +defmodule LolAnalytics.Dimensions.Item.ItemMetadata do + alias LolAnalytics.Dimensions.Item.ItemRepo + alias LolAnalytics.Dimensions.Champion.ChampionRepo + @items_data_url "https://ddragon.leagueoflegends.com/cdn/14.11.1/data/en_US/item.json" + + def update_metadata() do + data = get_items() + + data + # |> IO.inspect() + |> Enum.each(&save_metadata/1) + end + + defp get_items() do + with {:ok, resp} <- HTTPoison.get(@items_data_url), + %{"data" => data} <- Poison.decode!(resp.body) do + data + else + _ -> {:error, :get_items_error} + end + end + + defp save_metadata({item_id, metadata}) do + # IO.inspect(item) + ItemRepo.update(item_id, %{metadata: metadata}) + end +end diff --git a/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_repo.ex b/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_repo.ex index 8ab1ec4..0b871e8 100644 --- a/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_repo.ex +++ b/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_repo.ex @@ -10,7 +10,7 @@ defmodule LolAnalytics.Dimensions.Item.ItemRepo do case Repo.one(query) do nil -> item_changeset = ItemSchema.changeset(%ItemSchema{}, %{item_id: item_id}) - Repo.insert(item_changeset) + Repo.insert!(item_changeset) item -> item @@ -20,4 +20,11 @@ defmodule LolAnalytics.Dimensions.Item.ItemRepo do def list_items() do Repo.all(ItemSchema) end + + @spec update(item_id :: String.t(), attrs :: map()) :: any() + def update(item_id, attrs) do + get_or_create(item_id) + |> ItemSchema.changeset(attrs) + |> Repo.update() + end end diff --git a/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_schema.ex b/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_schema.ex index e61a07b..5424ba9 100644 --- a/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_schema.ex +++ b/apps/lol_analytics/lib/lol_analytics/dimensions/item/item_schema.ex @@ -2,14 +2,17 @@ defmodule LolAnalytics.Dimensions.Item.ItemSchema do use Ecto.Schema import Ecto.Changeset + @args [:item_id, :metadata] + schema "dim_item" do field :item_id, :integer + field :metadata, :map timestamps() end def changeset(item = %__MODULE__{}, attrs \\ %{}) do item - |> cast(attrs, [:item_id]) - |> validate_required([:item_id]) + |> cast(attrs, @args) + |> validate_required(@args) end end diff --git a/apps/lol_analytics/lib/lol_analytics/dimensions/player/player_schema.ex b/apps/lol_analytics/lib/lol_analytics/dimensions/player/player_schema.ex index 27ff15c..5e09f74 100644 --- a/apps/lol_analytics/lib/lol_analytics/dimensions/player/player_schema.ex +++ b/apps/lol_analytics/lib/lol_analytics/dimensions/player/player_schema.ex @@ -11,5 +11,6 @@ defmodule LolAnalytics.Dimensions.Player.PlayerSchema do player |> cast(attrs, [:puuid]) |> validate_required([:puuid]) + |> unique_constraint([:puuid]) end end diff --git a/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_item/repo.ex b/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_item/repo.ex index 8b563d6..8da271e 100644 --- a/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_item/repo.ex +++ b/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_item/repo.ex @@ -71,12 +71,14 @@ defmodule LolAnalytics.Facts.ChampionPickedItem.Repo do )", f.is_win ), + metadata: i.metadata, item_id: i.item_id, champion_id: c.champion_id, team_position: f.team_position, total_games: count("*") }, group_by: [ + i.metadata, i.item_id, c.champion_id, f.team_position diff --git a/apps/lol_analytics/priv/repo/migrations/20240613200312_item_metadata.exs b/apps/lol_analytics/priv/repo/migrations/20240613200312_item_metadata.exs new file mode 100644 index 0000000..479861a --- /dev/null +++ b/apps/lol_analytics/priv/repo/migrations/20240613200312_item_metadata.exs @@ -0,0 +1,9 @@ +defmodule LoLAnalytics.Repo.Migrations.ItemMetadata do + use Ecto.Migration + + def change do + alter table("dim_item") do + add :metadata, :map + end + end +end diff --git a/apps/lol_analytics/priv/repo/migrations/20240613212421_item_metadata_index.exs b/apps/lol_analytics/priv/repo/migrations/20240613212421_item_metadata_index.exs new file mode 100644 index 0000000..7773db3 --- /dev/null +++ b/apps/lol_analytics/priv/repo/migrations/20240613212421_item_metadata_index.exs @@ -0,0 +1,11 @@ +defmodule LoLAnalytics.Repo.Migrations.ItemMetadataIndex do + use Ecto.Migration + + def up do + execute("CREATE INDEX dim_item_metadata ON dim_item USING GIN(metadata)") + end + + def down do + execute("DROP INDEX dim_item_metadata") + end +end diff --git a/apps/lol_analytics_web/assets/css/app.css b/apps/lol_analytics_web/assets/css/app.css index 378c8f9..c23224c 100644 --- a/apps/lol_analytics_web/assets/css/app.css +++ b/apps/lol_analytics_web/assets/css/app.css @@ -3,3 +3,14 @@ @import "tailwindcss/utilities"; /* This file is for your main application CSS */ + +.tooltip { + visibility: hidden; + position: absolute; +} + +.has-tooltip:hover .tooltip { + visibility: visible; + z-index: 100; + background-color:lightsteelblue; +} \ No newline at end of file diff --git a/apps/lol_analytics_web/lib/lol_analytics_web/components/champion_components/champion_avatar.ex b/apps/lol_analytics_web/lib/lol_analytics_web/components/champion_components/champion_avatar.ex index d69d1ad..cd13004 100644 --- a/apps/lol_analytics_web/lib/lol_analytics_web/components/champion_components/champion_avatar.ex +++ b/apps/lol_analytics_web/lib/lol_analytics_web/components/champion_components/champion_avatar.ex @@ -9,7 +9,6 @@ defmodule LolAnalyticsWeb.ChampionComponents.ChampionAvatar do ~H"""
<%= @name %>
<%= item.name %>
--%> +<%= item.win_rate %>%
+<%= item.wins %>/<%= item.total_games %>
+<%= spell.name %>
-<%= spell.win_rate %>%
-<%= spell.wins %>/<%= spell.total_games %>
+<%= spell.win_rate %>%
+<%= spell.wins %>/<%= spell.total_games %>
+