diff --git a/apps/lol_analytics/lib/lol_analytics/champion_win_rate/champion_win_rate_repo.ex b/apps/lol_analytics/lib/lol_analytics/champion_win_rate/champion_win_rate_repo.ex deleted file mode 100644 index 164f5b7..0000000 --- a/apps/lol_analytics/lib/lol_analytics/champion_win_rate/champion_win_rate_repo.ex +++ /dev/null @@ -1,56 +0,0 @@ -defmodule LolAnalytics.ChampionWinRate.ChampionWinRateRepo do - import Ecto.Query - alias LolAnalytics.ChampionWinRate.ChampionWinRateSchema - alias LoLAnalytics.Repo - - @spec add_champion_win_rate( - champion_id :: String.t(), - patch :: String.t(), - position :: String.t(), - win? :: boolean - ) :: {:ok, ChampionWinRateSchema.t()} | {:error, Ecto.Changeset.t()} - def add_champion_win_rate(champion_id, patch, position, win?) do - Repo.transaction(fn -> - champion_query = - from cwr in LolAnalytics.ChampionWinRate.ChampionWinRateSchema, - where: cwr.champion_id == ^champion_id and cwr.position == ^position, - lock: "FOR UPDATE" - - champion_data = Repo.one(champion_query) - - case champion_data do - nil -> - ChampionWinRateSchema.changeset(%ChampionWinRateSchema{}, %{ - champion_id: champion_id, - patch: patch, - total_games: 1, - position: position, - total_wins: if(win?, do: 1, else: 0) - }) - |> Repo.insert!() - - _ -> - total_games = champion_data.total_games + 1 - total_wins = champion_data.total_wins + if win?, do: 1, else: 0 - - ChampionWinRateSchema.changeset(champion_data, %{ - total_games: total_games, - total_wins: total_wins - }) - |> Repo.update!() - end - end) - end - - def list_win_rates() do - Repo.all(ChampionWinRateSchema) - end - - def get_champion_win_rate(champion_id, _patch) do - champion_query = - from cwr in LolAnalytics.ChampionWinRate.ChampionWinRateSchema, - where: cwr.champion_id == ^champion_id - - Repo.one(champion_query) - end -end diff --git a/apps/lol_analytics/lib/lol_analytics/champion_win_rate/champion_win_rate_schema.ex b/apps/lol_analytics/lib/lol_analytics/champion_win_rate/champion_win_rate_schema.ex deleted file mode 100644 index ff95c61..0000000 --- a/apps/lol_analytics/lib/lol_analytics/champion_win_rate/champion_win_rate_schema.ex +++ /dev/null @@ -1,20 +0,0 @@ -defmodule LolAnalytics.ChampionWinRate.ChampionWinRateSchema do - use Ecto.Schema - import Ecto.Changeset - - schema "champion_win_rate" do - field :champion_id, :integer - field :total_games, :integer - field :patch, :string - field :position, :string - field :total_wins, :integer - - timestamps() - end - - def changeset(%__MODULE__{} = champion_win_rate, attrs) do - champion_win_rate - |> cast(attrs, [:champion_id, :total_games, :patch, :total_wins, :position]) - |> validate_required([:champion_id, :total_games, :patch, :total_wins, :position]) - 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 5e09f74..bfc5b5b 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 @@ -2,14 +2,20 @@ defmodule LolAnalytics.Dimensions.Player.PlayerSchema do use Ecto.Schema import Ecto.Changeset + @attrs [:puuid, :last_processed_at] + schema "dim_player" do field :puuid, :string + + field :last_processed_at, :utc_datetime, + default: DateTime.utc_now() |> DateTime.truncate(:second) + timestamps() end def changeset(player = %__MODULE__{}, attrs \\ %{}) do player - |> cast(attrs, [:puuid]) + |> cast(attrs, @attrs) |> validate_required([:puuid]) |> unique_constraint([:puuid]) 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 0c58562..652eef7 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 @@ -36,13 +36,6 @@ defmodule LolAnalytics.Facts.ChampionPickedItem.Repo do _patch = PatchRepo.get_or_create(attrs.patch_number) _item_id = ItemRepo.get_or_create(attrs.item_id) - _match = - MatchRepo.get_or_create(%{ - match_id: attrs.match_id, - patch_number: attrs.patch_number, - queue_id: attrs.queue_id - }) - prev = from(f in Schema, where: diff --git a/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_summoner_spell/repo.ex b/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_summoner_spell/repo.ex index 81bc307..99dba80 100644 --- a/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_summoner_spell/repo.ex +++ b/apps/lol_analytics/lib/lol_analytics/facts/champion_picked_summoner_spell/repo.ex @@ -27,13 +27,6 @@ defmodule LolAnalytics.Facts.ChampionPickedSummonerSpell.Repo do _spell = SummonerSpellRepo.get_or_create(attrs.summoner_spell_id) _patch = PatchRepo.get_or_create(attrs.patch_number) - _match = - MatchRepo.get_or_create(%{ - match_id: attrs.match_id, - patch_number: attrs.patch_number, - queue_id: attrs.queue_id - }) - prev = from(f in Schema, where: diff --git a/apps/lol_analytics/lib/lol_analytics/facts/champion_played_game/champion_played_game_repo.ex b/apps/lol_analytics/lib/lol_analytics/facts/champion_played_game/champion_played_game_repo.ex index eb86c2b..6240faf 100644 --- a/apps/lol_analytics/lib/lol_analytics/facts/champion_played_game/champion_played_game_repo.ex +++ b/apps/lol_analytics/lib/lol_analytics/facts/champion_played_game/champion_played_game_repo.ex @@ -5,7 +5,6 @@ defmodule LolAnalytics.Facts.ChampionPlayedGame.Repo do alias LolAnalytics.Dimensions.Champion.ChampionSchema alias LolAnalytics.Dimensions.Player.PlayerRepo alias LolAnalytics.Dimensions.Champion.ChampionRepo - alias LolAnalytics.Dimensions.Match.MatchRepo alias LolAnalytics.Facts.ChampionPlayedGame.Schema alias LoLAnalytics.Repo @@ -14,13 +13,6 @@ defmodule LolAnalytics.Facts.ChampionPlayedGame.Repo do _player = PlayerRepo.get_or_create(attrs.puuid) _patch = PatchRepo.get_or_create(attrs.patch_number) - _match = - MatchRepo.get_or_create(%{ - match_id: attrs.match_id, - patch_number: attrs.patch_number, - queue_id: attrs.queue_id - }) - prev = from(f in Schema, where: diff --git a/apps/lol_analytics/priv/repo/migrations/20240624165516_dim_player_last_processed.exs b/apps/lol_analytics/priv/repo/migrations/20240624165516_dim_player_last_processed.exs new file mode 100644 index 0000000..e31d5b6 --- /dev/null +++ b/apps/lol_analytics/priv/repo/migrations/20240624165516_dim_player_last_processed.exs @@ -0,0 +1,9 @@ +defmodule LoLAnalytics.Repo.Migrations.DimPlayerLastProcessed do + use Ecto.Migration + + def change do + alter table "dim_player" do + add :last_processed_at, :utc_datetime + end + end +end diff --git a/queries.md b/queries.md deleted file mode 100644 index ebb0775..0000000 --- a/queries.md +++ /dev/null @@ -1,22 +0,0 @@ -``` -SELECT - (cast(count(CASE WHEN is_win THEN 1 END) as float) / cast(count(*) as float)) * 100.0 as win_rate, - count(CASE WHEN is_win THEN 1 END) as games_won, - count(*) as total_games, - champion_id - FROM fact_champion_played_game - GROUP BY champion_id - ORDER BY win_rate desc; -``` - -``` -SELECT - (cast(count(CASE WHEN is_win THEN 1 END) as float) / cast(count(*) as float)) * 100.0 as win_rate, - count(CASE WHEN is_win THEN 1 END) as games_won, - count(*) as total_games, - champion_id, - team_position - FROM fact_champion_played_game - GROUP BY champion_id, team_position - ORDER BY win_rate desc; -``` \ No newline at end of file