From 717b8f567677b83d7486c5585a9ae0d44330672e Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 23 Feb 2026 22:49:56 +0100 Subject: [PATCH] UpdateSingleMemberField: error attribution, updated_at, snapshot newline Attach errors to :field, :show_in_overview, :member_field_required. Set updated_at in SQL UPDATE. Add trailing newline to snapshot JSON. --- .../changes/update_single_member_field.ex | 25 +++++++++++++------ .../repo/settings/20260223195453.json | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/membership/setting/changes/update_single_member_field.ex b/lib/membership/setting/changes/update_single_member_field.ex index a479164..e24860c 100644 --- a/lib/membership/setting/changes/update_single_member_field.ex +++ b/lib/membership/setting/changes/update_single_member_field.ex @@ -38,7 +38,7 @@ defmodule Mv.Membership.Setting.Changes.UpdateSingleMemberField do nil -> {:error, add_error(changeset, - field: :member_field_visibility, + field: :field, message: "field argument is required" )} @@ -51,20 +51,28 @@ defmodule Mv.Membership.Setting.Changes.UpdateSingleMemberField do {:error, add_error( changeset, - field: :member_field_visibility, + field: :field, message: "Invalid member field: #{field}" )} end end end - defp get_and_validate_boolean(changeset, arg_name) do + defp get_and_validate_boolean(changeset, :show_in_overview = arg_name) do + do_validate_boolean(changeset, arg_name, :show_in_overview) + end + + defp get_and_validate_boolean(changeset, :required = arg_name) do + do_validate_boolean(changeset, arg_name, :member_field_required) + end + + defp do_validate_boolean(changeset, arg_name, error_field) do case Ash.Changeset.get_argument(changeset, arg_name) do nil -> {:error, add_error( changeset, - field: :member_field_visibility, + field: error_field, message: "#{arg_name} argument is required" )} @@ -75,7 +83,7 @@ defmodule Mv.Membership.Setting.Changes.UpdateSingleMemberField do {:error, add_error( changeset, - field: :member_field_visibility, + field: error_field, message: "#{arg_name} must be a boolean" )} end @@ -102,7 +110,8 @@ defmodule Mv.Membership.Setting.Changes.UpdateSingleMemberField do ARRAY[$1::text], to_jsonb($3::boolean), true - ) + ), + updated_at = (now() AT TIME ZONE 'utc') WHERE id = $4 RETURNING member_field_visibility, member_field_required """ @@ -125,7 +134,7 @@ defmodule Mv.Membership.Setting.Changes.UpdateSingleMemberField do {:ok, %{rows: []}} -> {:error, Invalid.exception( - field: :member_field_visibility, + field: :member_field_required, message: "Settings not found" )} @@ -134,7 +143,7 @@ defmodule Mv.Membership.Setting.Changes.UpdateSingleMemberField do {:error, Invalid.exception( - field: :member_field_visibility, + field: :member_field_required, message: "Failed to update member field settings" )} end diff --git a/priv/resource_snapshots/repo/settings/20260223195453.json b/priv/resource_snapshots/repo/settings/20260223195453.json index 770e8ec..e035389 100644 --- a/priv/resource_snapshots/repo/settings/20260223195453.json +++ b/priv/resource_snapshots/repo/settings/20260223195453.json @@ -149,4 +149,4 @@ "repo": "Elixir.Mv.Repo", "schema": null, "table": "settings" -} \ No newline at end of file +}