Display picked items by champion
ci / docker (push) Waiting to run

This commit is contained in:
2024-06-14 01:08:23 +02:00
parent bd8148f3e2
commit aafb805194
16 changed files with 147 additions and 22 deletions
@@ -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
@@ -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
@@ -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
@@ -11,5 +11,6 @@ defmodule LolAnalytics.Dimensions.Player.PlayerSchema do
player
|> cast(attrs, [:puuid])
|> validate_required([:puuid])
|> unique_constraint([:puuid])
end
end
@@ -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
@@ -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
@@ -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