defmodule MicrowavepropWeb.Router do use MicrowavepropWeb, :router import Phoenix.LiveDashboard.Router pipeline :browser do plug :accepts, ["html"] plug :fetch_session plug :store_remote_ip plug :fetch_live_flash plug :put_root_layout, html: {MicrowavepropWeb.Layouts, :root} plug :protect_from_forgery plug :put_secure_browser_headers end defp store_remote_ip(conn, _opts) do ip_str = conn.remote_ip |> :inet.ntoa() |> to_string() Plug.Conn.put_session(conn, :remote_ip, ip_str) end pipeline :api do plug :accepts, ["json"] end # Health check — no pipeline, minimal overhead get "/health", MicrowavepropWeb.HealthController, :check, log: false scope "/", MicrowavepropWeb do pipe_through :browser get "/", PageController, :home live "/submit", SubmitLive live "/map", MapLive live "/weather", WeatherMapLive live "/contacts", ContactLive.Index live "/contacts/map", ContactMapLive live "/contacts/:id", ContactLive.Show live "/path", PathLive live "/rover", RoverLive live "/algo", AlgoLive live "/backfill", BackfillLive # Redirect old /qsos routes get "/qsos", PageController, :redirect_contacts get "/qsos/:id", PageController, :redirect_contact end # Other scopes may use custom stacks. # scope "/api", MicrowavepropWeb do # pipe_through :api # end scope "/" do pipe_through :browser live_dashboard "/dashboard", metrics: MicrowavepropWeb.Telemetry, ecto_repos: [Microwaveprop.Repo], ecto_psql_extras_options: [long_running_queries: [threshold: "200 milliseconds"]] end # Enable Swoosh mailbox preview in development if Application.compile_env(:microwaveprop, :dev_routes) do scope "/dev" do pipe_through :browser forward "/mailbox", Plug.Swoosh.MailboxPreview end end end