Credo: Kanban single-branch conds become ifs; card field set/clear split out

b7432b9 · Gabe Morell · 2026-11-04 20:36

3 files +79 -82

Files changed

modified lib/waxx/kanban.ex
+79 −82
@@ -836,21 +836,19 @@ defmodule Waxx.Kanban do
836 836 invite consumed. Returns `{:ok, board}` or `{:error, reason}`.
837 837 """
838 838 def redeem_board_invite(%BoardInvite{} = invite, %User{id: user_id} = user) do
839 − cond do
840 − not BoardInvite.active?(invite) ->
841 − {:error, :inactive}
842 −
843 − true ->
844 − Repo.transact(fn ->
845 − existing =
846 − Repo.get_by(Membership, board_id: invite.board_id, user_id: user_id)
839 + if BoardInvite.active?(invite) do
840 + Repo.transact(fn ->
841 + existing =
842 + Repo.get_by(Membership, board_id: invite.board_id, user_id: user_id)
847 843
848 − with {:ok, _membership} <- ensure_membership(existing, invite, user_id),
849 − {:ok, _invite} <-
850 − invite |> BoardInvite.consume_changeset(user) |> Repo.update() do
851 − {:ok, Repo.get!(Board, invite.board_id)}
852 − end
853 − end)
844 + with {:ok, _membership} <- ensure_membership(existing, invite, user_id),
845 + {:ok, _invite} <-
846 + invite |> BoardInvite.consume_changeset(user) |> Repo.update() do
847 + {:ok, Repo.get!(Board, invite.board_id)}
848 + end
849 + end)
850 + else
851 + {:error, :inactive}
854 852 end
855 853 end
856 854
@@ -1673,65 +1671,66 @@ defmodule Waxx.Kanban do
1673 1671 Always validates that the field belongs to the card's board.
1674 1672 """
1675 1673 def set_card_field_value(
1676 − %Card{id: card_id, board_id: board_id} = card,
1674 + %Card{board_id: board_id} = card,
1677 1675 %BoardField{} = field,
1678 1676 raw_value,
1679 1677 opts \\ []
1680 1678 ) do
1681 − cond do
1682 − field.board_id != board_id ->
1683 − {:error, :invalid_field}
1684 −
1685 − true ->
1686 − case normalize_field_value(field, raw_value) do
1687 − {:ok, nil} ->
1688 − Repo.delete_all(
1689 − from(v in CardFieldValue,
1690 − where: v.card_id == ^card_id and v.board_field_id == ^field.id
1691 − )
1692 − )
1679 + if field.board_id != board_id do
1680 + {:error, :invalid_field}
1681 + else
1682 + case normalize_field_value(field, raw_value) do
1683 + {:ok, nil} -> clear_card_field_value(card, field, opts)
1684 + {:ok, value} -> put_card_field_value(card, field, value, opts)
1685 + {:error, _} = err -> err
1686 + end
1687 + end
1688 + end
1693 1689
1694 − broadcast_cards_changed(board_id)
1690 + defp clear_card_field_value(%Card{id: card_id, board_id: board_id} = card, field, opts) do
1691 + Repo.delete_all(
1692 + from(v in CardFieldValue,
1693 + where: v.card_id == ^card_id and v.board_field_id == ^field.id
1694 + )
1695 + )
1695 1696
1696 − log(board_id, opts[:actor], "card_field_cleared",
1697 − card_id: card_id,
1698 − meta: %{field_name: field.name}
1699 − )
1697 + broadcast_cards_changed(board_id)
1700 1698
1701 − {:ok, card}
1699 + log(board_id, opts[:actor], "card_field_cleared",
1700 + card_id: card_id,
1701 + meta: %{field_name: field.name}
1702 + )
1702 1703
1703 − {:ok, value} ->
1704 − existing =
1705 − Repo.get_by(CardFieldValue, card_id: card_id, board_field_id: field.id)
1704 + {:ok, card}
1705 + end
1706 1706
1707 − cs =
1708 − if existing,
1709 − do: CardFieldValue.changeset(existing, %{value: value}),
1710 − else:
1711 − CardFieldValue.changeset(%CardFieldValue{}, %{
1712 − card_id: card_id,
1713 − board_field_id: field.id,
1714 − value: value
1715 − })
1707 + defp put_card_field_value(%Card{id: card_id, board_id: board_id}, field, value, opts) do
1708 + existing =
1709 + Repo.get_by(CardFieldValue, card_id: card_id, board_field_id: field.id)
1716 1710
1717 − case if(existing, do: Repo.update(cs), else: Repo.insert(cs)) do
1718 − {:ok, _} = result ->
1719 − broadcast_cards_changed(board_id)
1711 + cs =
1712 + if existing,
1713 + do: CardFieldValue.changeset(existing, %{value: value}),
1714 + else:
1715 + CardFieldValue.changeset(%CardFieldValue{}, %{
1716 + card_id: card_id,
1717 + board_field_id: field.id,
1718 + value: value
1719 + })
1720 1720
1721 − log(board_id, opts[:actor], "card_field_set",
1722 − card_id: card_id,
1723 − meta: %{field_name: field.name, value: value}
1724 − )
1721 + case if(existing, do: Repo.update(cs), else: Repo.insert(cs)) do
1722 + {:ok, _} = result ->
1723 + broadcast_cards_changed(board_id)
1725 1724
1726 − result
1725 + log(board_id, opts[:actor], "card_field_set",
1726 + card_id: card_id,
1727 + meta: %{field_name: field.name, value: value}
1728 + )
1727 1729
1728 − other ->
1729 − other
1730 − end
1730 + result
1731 1731
1732 − {:error, _} = err ->
1733 − err
1734 − end
1732 + other ->
1733 + other
1735 1734 end
1736 1735 end
1737 1736
@@ -1789,33 +1788,31 @@ defmodule Waxx.Kanban do
1789 1788 %BoardLabel{} = label,
1790 1789 opts \\ []
1791 1790 ) do
1792 − cond do
1793 − label.board_id != board_id ->
1794 − {:error, :invalid_label}
1795 −
1796 − true ->
1797 − existing =
1798 − Repo.get_by(CardLabel, card_id: card_id, board_label_id: label.id)
1799 −
1800 − result =
1801 − if existing do
1802 − Repo.delete(existing)
1803 − else
1804 − %CardLabel{}
1805 − |> CardLabel.changeset(%{card_id: card_id, board_label_id: label.id})
1806 − |> Repo.insert()
1807 − end
1791 + if label.board_id != board_id do
1792 + {:error, :invalid_label}
1793 + else
1794 + existing =
1795 + Repo.get_by(CardLabel, card_id: card_id, board_label_id: label.id)
1796 +
1797 + result =
1798 + if existing do
1799 + Repo.delete(existing)
1800 + else
1801 + %CardLabel{}
1802 + |> CardLabel.changeset(%{card_id: card_id, board_label_id: label.id})
1803 + |> Repo.insert()
1804 + end
1808 1805
1809 − broadcast_cards_changed(board_id)
1806 + broadcast_cards_changed(board_id)
1810 1807
1811 − action = if existing, do: "card_label_removed", else: "card_label_added"
1808 + action = if existing, do: "card_label_removed", else: "card_label_added"
1812 1809
1813 − log(board_id, opts[:actor], action,
1814 − card_id: card_id,
1815 − meta: %{label_name: label.name}
1816 − )
1810 + log(board_id, opts[:actor], action,
1811 + card_id: card_id,
1812 + meta: %{label_name: label.name}
1813 + )
1817 1814
1818 − result
1815 + result
1819 1816 end
1820 1817 end
1821 1818

Parents: 21eaa0a