defmodule MicrowavepropWeb.Api.V1.ProfileController do @moduledoc "Public per-callsign user profile (no email exposed)." use Phoenix.Controller, formats: [:json] alias Microwaveprop.Accounts alias Microwaveprop.Beacons alias Microwaveprop.Radio alias MicrowavepropWeb.Api.ErrorJSON alias MicrowavepropWeb.Api.V1.BeaconJSON alias MicrowavepropWeb.Api.V1.ContactJSON alias MicrowavepropWeb.Api.V1.UserJSON plug :accepts, ["json"] @spec show(Plug.Conn.t(), map()) :: Plug.Conn.t() def show(conn, %{"callsign" => callsign}) do case Accounts.get_user_by_callsign(callsign) do nil -> ErrorJSON.send_problem(conn, 404, "not_found", "Callsign not registered.") user -> contacts = Radio.list_contacts_involving_callsign(user.callsign) beacons = Beacons.list_beacons_for_user(user) json(conn, %{ user: UserJSON.public(user).data, contacts: ContactJSON.index(%{contacts: contacts}).data, beacons: BeaconJSON.index(%{beacons: beacons}).data }) end end end