Only queue player if it was not updated in 12 hours

This commit is contained in:
Álvaro 2024-05-05 02:38:06 +02:00
parent 8063944e54
commit 7feb550540

View File

@ -1,6 +1,9 @@
defmodule Scrapper.Queue.PlayerQueue do defmodule Scrapper.Queue.PlayerQueue do
require Logger
use GenServer use GenServer
@hours_to_update_player 12
def start_link(_opts) do def start_link(_opts) do
GenServer.start_link(__MODULE__, {}, name: __MODULE__) GenServer.start_link(__MODULE__, {}, name: __MODULE__)
end end
@ -13,15 +16,37 @@ defmodule Scrapper.Queue.PlayerQueue do
{:ok, {channel, connection}} {:ok, {channel, connection}}
end end
@spec queue_player(String.t()) :: nil @spec queue_puuid(String.t()) :: nil
def queue_player(puuid) do def queue_puuid(puuid) do
case LolAnalytics.Player.PlayerRepo.get_player(puuid) do case LolAnalytics.Player.PlayerRepo.get_player(puuid) do
nil -> GenServer.call(__MODULE__, {:queue_player, puuid}) nil -> GenServer.call(__MODULE__, {:queue_player, puuid})
_ -> :already_processed player_entry -> queue_if_not_updated?(player_entry)
end
end
@spec queue_if_not_updated?(%LolAnalytics.Player.PlayerSchema{}) :: nil
defp queue_if_not_updated?(player = %LolAnalytics.Player.PlayerSchema{}) do
now = DateTime.utc_now() |> DateTime.truncate(:second)
case player.last_processed_at do
nil ->
GenServer.call(__MODULE__, {:queue_player, player.puuid})
processed_at ->
diff_in_hours = DateTime.diff(now, processed_at, :hour)
if diff_in_hours > @hours_to_update_player do
GenServer.call(__MODULE__, {:queue_player, player.puuid})
else
Logger.info(
"Player #{player.puuid} already processed at #{player.last_processed_at}, diff was #{diff_in_hours}"
)
end
end end
end end
def handle_call({:queue_player, puuid}, _from, {channel, _} = state) do def handle_call({:queue_player, puuid}, _from, {channel, _} = state) do
LolAnalytics.Player.PlayerRepo.insert_player(puuid)
AMQP.Basic.publish(channel, "", "player", puuid) AMQP.Basic.publish(channel, "", "player", puuid)
{:reply, nil, state} {:reply, nil, state}
end end