defmodule ArcadiaCloudWeb.DashboardController do @moduledoc """ Cost-vs-revenue dashboard. platform_admin only — this is the operator's margin view across all tenants. """ use ArcadiaCloudWeb, :controller alias ArcadiaCloud.Analytics def margin(conn, params) do with :ok <- require_platform_admin(conn) do period = parse_period(params["period"]) summary = Analytics.margin_summary(period) by_kind = Analytics.by_kind(period) json(conn, Map.merge(summary, by_kind)) end end def accrual(conn, _params) do with :ok <- require_platform_admin(conn) do accrual = Analytics.live_accrual() json(conn, %{ accrual: accrual, total_accrued_cents: Enum.reduce(accrual, 0, &(&1.accrued_cents + &2)) }) end end defp require_platform_admin(conn) do identity = conn.assigns.current_identity if is_list(identity.roles) and "platform_admin" in identity.roles do :ok else conn |> put_status(:forbidden) |> json(%{error: "platform_admin_required"}) |> halt() end end # period defaults to the previous calendar month (what the last rollup invoiced) defp parse_period(nil), do: Date.beginning_of_month(Date.add(Date.beginning_of_month(Date.utc_today()), -1)) defp parse_period(""), do: parse_period(nil) defp parse_period(str) do case Date.from_iso8601(str) do {:ok, d} -> Date.beginning_of_month(d) _ -> parse_period(nil) end end end