To be very honest, I think both before and after are not readable. The code is too dense. When you skip variables, you lose the opportunity to give names to values, so the reader needs to keep a lot in their head.
Here is one alternative:
def remove_old_sessions(session_age) do
now = System.system_time(:second)
for user <- list_users() do
new_sessions =
user.sessions
|> Enum.filter(fn {_, time} -> time + session_age > now)
|> Enum.into(%{})
user
|> change(sessions: new_sessions)
|> Repo.update()
end
end
Although it probably wouldn’t hurt to break it into more functions.
PS: if you want to further abuse comprehensions:
new_sessions =
for {_, time} <- user.sessions,
into: %{},
do: time + session_age > now






















