@@ -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
|
||||
Reference in New Issue
Block a user