defmodule MicrowavepropWeb.Api.V1.BeaconController do @moduledoc "Read approved beacons; submit new beacons (pending approval)." use Phoenix.Controller, formats: [:json] alias Microwaveprop.Beacons alias MicrowavepropWeb.Api.ErrorJSON alias MicrowavepropWeb.Api.V1.BeaconJSON plug :accepts, ["json"] action_fallback MicrowavepropWeb.Api.FallbackController def index(conn, _params) do beacons = Beacons.list_beacons() json(conn, BeaconJSON.index(%{beacons: beacons})) end def show(conn, %{"id" => id}) do viewer = conn.assigns[:current_api_user] case Beacons.get_visible_beacon(id, viewer) do nil -> ErrorJSON.send_problem(conn, 404, "not_found", "Beacon not found.") beacon -> json(conn, BeaconJSON.show(%{beacon: beacon})) end end def create(conn, params) do user = conn.assigns.current_api_user attrs = Map.take( params, ~w(frequency_mhz callsign grid lat lon power_mw height_ft on_the_air keying bearing beamwidth_deg notes) ) case Beacons.create_beacon(user, attrs) do {:ok, beacon} -> conn |> put_status(:created) |> json(BeaconJSON.show(%{beacon: beacon})) {:error, changeset} -> ErrorJSON.send_changeset(conn, changeset) end end end