feat: add decimal type support to ApplicationSetting

This commit is contained in:
Graham McIntire 2026-03-06 13:30:30 -06:00
parent 7d61d8fb0a
commit a16ce2b9dd
No known key found for this signature in database
2 changed files with 29 additions and 1 deletions

View file

@ -35,7 +35,7 @@ defmodule Towerops.Settings.ApplicationSetting do
setting
|> cast(attrs, [:key, :value, :value_type, :description])
|> validate_required([:key, :value_type])
|> validate_inclusion(:value_type, ["string", "integer", "uuid", "boolean", "json"])
|> validate_inclusion(:value_type, ["string", "integer", "uuid", "boolean", "json", "decimal"])
|> unique_constraint(:key)
end
@ -72,4 +72,11 @@ defmodule Towerops.Settings.ApplicationSetting do
{:error, _} -> nil
end
end
def parse_value(%__MODULE__{value: value, value_type: "decimal"}) do
case Decimal.parse(value) do
{decimal, _remainder} -> decimal
:error -> nil
end
end
end

View file

@ -50,6 +50,27 @@ defmodule Towerops.SettingsTest do
{:ok, _setting} = create_setting("test_invalid_json", "not json", "json")
assert Settings.get_setting("test_invalid_json") == nil
end
test "parses decimal values correctly" do
{:ok, _setting} = create_setting("test_decimal", "123.45", "decimal")
result = Settings.get_setting("test_decimal")
assert result == Decimal.new("123.45")
assert %Decimal{} = result
end
test "returns nil for invalid decimal" do
{:ok, _setting} = create_setting("test_invalid_decimal", "not_a_number", "decimal")
assert Settings.get_setting("test_invalid_decimal") == nil
end
test "parses decimal with remainder correctly" do
{:ok, _setting} = create_setting("test_decimal_remainder", "123.45abc", "decimal")
# Decimal.parse stops at invalid chars, returns parsed portion
assert Settings.get_setting("test_decimal_remainder") == Decimal.new("123.45")
end
end
describe "get_setting_record/1" do