Support assets upserts

This commit is contained in:
Claudio Ortolina
2025-09-01 15:06:00 +03:00
parent bd12454884
commit cbf567a502
2 changed files with 7 additions and 9 deletions
+2 -2
View File
@@ -9,7 +9,7 @@ defmodule MusicLibrary.Assets do
def store(params) do def store(params) do
%Asset{} %Asset{}
|> Asset.changeset(params) |> Asset.changeset(params)
|> Repo.insert() |> Repo.insert(on_conflict: :nothing, returning: true)
end end
@doc """ @doc """
@@ -18,7 +18,7 @@ defmodule MusicLibrary.Assets do
def store_image(params) do def store_image(params) do
%Asset{} %Asset{}
|> Asset.image_changeset(params) |> Asset.image_changeset(params)
|> Repo.insert() |> Repo.insert(on_conflict: :nothing, returning: true)
end end
def get(hash) do def get(hash) do
+5 -7
View File
@@ -9,7 +9,7 @@ defmodule MusicLibrary.AssetsTest do
params = %{ params = %{
content: "some content", content: "some content",
format: "text/plain", format: "text/plain",
properties: %{language: "english"} properties: %{"language" => "english"}
} }
assert {:ok, asset} = Assets.store(params) assert {:ok, asset} = Assets.store(params)
@@ -19,17 +19,15 @@ defmodule MusicLibrary.AssetsTest do
assert asset.format == "text/plain" assert asset.format == "text/plain"
end end
test "prevents duplicates" do test "prevents duplicates returning the same asset" do
params = %{ params = %{
content: "some content", content: "some content",
format: "text/plain", format: "text/plain",
properties: %{language: "english"} properties: %{"language" => "english"}
} }
assert {:ok, _asset} = Assets.store(params) assert {:ok, asset} = Assets.store(params)
assert {:error, changeset} = Assets.store(params) assert {:ok, asset} == Assets.store(params)
assert [hash: {"has already been taken", _}] = changeset.errors
end end
end end