defmodule Triglav.Zet.Osmosis do
@moduledoc """
Loads public relation data from the osmosis schema.
"""
alias Triglav.Repo
alias Triglav.Schemas.Osmosis.Node
alias Triglav.Schemas.Osmosis.Relation
alias Triglav.Schemas.Osmosis.Way
import Ecto.Query
import Geo.PostGIS
def list_public_transport_relations(opts \\ []) do
pt_relations()
|> maybe_filter_by_ref(opts)
|> maybe_preload_members(opts)
|> Repo.all()
end
defp pt_relations() do
from(r in Relation,
where:
fragment("tags->?", "type") in ["route", "route_master"] and
fragment("lower(tags->?)", "network") == "zet"
)
end
defp maybe_filter_by_ref(query, ref: ref),
do: where(query, [r], fragment("tags->?", "ref") == ^ref)
defp maybe_filter_by_ref(query, _), do: query
defp maybe_preload_members(query, members: true), do: preload(query, [r], :members)
defp maybe_preload_members(query, _), do: query
end