Credo: share-link specs name Canvas.t() and Folder.t(), not bare structs

5d06442 · Gabe Morell · 2026-11-04 20:30

6 files +7 -3

Files changed

modified lib/diogramos/diagrams/canvas.ex
+2 −0
@@ -23,6 +23,8 @@ defmodule Diogramos.Diagrams.Canvas do
23 23 :updated_at
24 24 ]}
25 25
26 + @type t :: %__MODULE__{}
27 +
26 28 schema "canvases" do
27 29 field :slug, :string
28 30 field :title, :string
modified lib/diogramos/diagrams/folder.ex
+2 −0
@@ -8,6 +8,8 @@ defmodule Diogramos.Diagrams.Folder do
8 8
9 9 alias Diogramos.Accounts.User
10 10
11 + @type t :: %__MODULE__{}
12 +
11 13 schema "folders" do
12 14 field :name, :string
13 15
modified lib/diogramos/diagrams/share_links.ex
+3 −3
@@ -14,7 +14,7 @@ defmodule Diogramos.Diagrams.ShareLinks do
14 14 alias Diogramos.Accounts.{Scope, User}
15 15 alias Diogramos.Diagrams.{Canvas, Folder, Permissions, ShareLink}
16 16
17 − @spec create(Scope.t(), %Canvas{} | %Folder{}, String.t(), keyword()) ::
17 + @spec create(Scope.t(), Canvas.t() | Folder.t(), String.t(), keyword()) ::
18 18 {:ok, ShareLink.t()} | {:error, Ecto.Changeset.t() | :forbidden}
19 19 def create(%Scope{user: %User{id: user_id}} = scope, subject, role, opts \\ [])
20 20 when role in ["viewer", "editor"] do
@@ -41,7 +41,7 @@ defmodule Diogramos.Diagrams.ShareLinks do
41 41 end
42 42 end
43 43
44 − @spec list_for(%Canvas{} | %Folder{}) :: [ShareLink.t()]
44 + @spec list_for(Canvas.t() | Folder.t()) :: [ShareLink.t()]
45 45 def list_for(subject) do
46 46 type = subject_type(subject)
47 47
@@ -76,7 +76,7 @@ defmodule Diogramos.Diagrams.ShareLinks do
76 76 current user just refreshes the existing grant.
77 77 """
78 78 @spec redeem(String.t(), User.t() | nil) ::
79 − {:ok, User.t(), %Canvas{} | %Folder{}}
79 + {:ok, User.t(), Canvas.t() | Folder.t()}
80 80 | {:error, :invalid_link | :subject_missing | Ecto.Changeset.t()}
81 81 def redeem(token, current_user) when is_binary(token) do
82 82 with %ShareLink{} = link <- get_active_by_token(token),

Parents: 16b4f36