defmodule DiogramosWeb.Api.V1.CanvasJSON do
@moduledoc """
Canvas payloads.
`document` is emitted **verbatim** — the same jsonb map
`Diogramos.Diagrams.Document` validates and stores. It is deliberately
not remapped into a client-flavored schema: patches stay partial, and a
client never has to send back fields it didn't understand.
The list payload omits `document` entirely; a canvas list on a phone
doesn't need every element of every diagram.
"""
alias Diogramos.Diagrams.Canvas
def index(%{canvases: canvases, roles: roles}) do
%{data: for(canvas <- canvases, do: summary(canvas, roles[canvas.id]))}
end
def show(%{canvas: canvas, role: role}) do
%{data: full(canvas, role)}
end
@doc false
def summary(%Canvas{} = canvas, role) do
%{
id: canvas.id,
slug: canvas.slug,
title: canvas.title,
theme: canvas.theme,
folder_id: canvas.folder_id,
version: canvas.version,
role: role,
inserted_at: canvas.inserted_at,
updated_at: canvas.updated_at
}
end
@doc false
def full(%Canvas{} = canvas, role) do
canvas
|> summary(role)
|> Map.put(:document, canvas.document)
end
end
neiam
/diogramos
diogramos
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
1.2 KiB · text
History
dc2edab